msdn gives quick start to upload image file using background transfer. but I was looking for way to upload image file using WinJS.xhr() in the javascript app.
Windows.Storage.Pickers.FileOpenPicker.pickSingleFileAsync() returns StorageFille object whereas WinJS.xhr.send() expects a File DOM object. Essentially, what we need is way to get a w3c File DOM object out of StorageFile object. I found finally the method MsApp.createFileFromStorageFile() to do that.
// url needs to be SAS (shared access signature) url for the blob when the container is protected // otherwise - it requires putting authorization code in the request. I have talked about in previous post. // but if the javascript is in the client side - you wont like to put your client secret in the app. // hence, you need to have some mechanism (your service) to return the sas url for your azure container/blob. var url = ''; var date = new Date().toGMTString().replace('UTC', 'GMT'); var data = MSApp.createFileFromStorageFile(storageFile); var xhrOptions = { type: 'PUT', url: blobSasUrl, headers: { 'Content-Type': 'image/jpeg', 'Content-Length': data.size, 'x-ms-date': date, 'x-ms-version': '2009-09-19', 'x-ms-blob-type': 'BlockBlob', }, data: data, }; WinJS.xhr(options).then(null, function onerror(error) { // handle error });
I see that many of us need to upload images to azure blob containers. If you are one of us, it will help to know little bit more to help you better.