jquery - 403 Error when testing azure Blob Storage upload -


i read , implemented following article chunking files between javascript client , azure blob storage: http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript. seem able generate shared access signature , create permissions, when try "put" chunks azure following sas url, receiving error: "403 (server failed authenticate request. make sure value of authorization header formed correctly including signature.)". please doing wrong. here code , url , code:

//sas url generated http://testing.blob.core.windows.net/image-container?sr=c&si=perms1&sig=uowbdvclffdivkttzuoupj6bimuzlrxf3wezlxkmjca%3d&comp=block&blockid=ymxvy2stmdawmdaw   //upload blocks azure storage if (evt.target.readystate == filereader.done) { // done == 2     var uri = submituri + '&comp=block&blockid=' + blockids[blockids.length - 1];     var requestdata = new uint8array(evt.target.result);     $.ajax({         url: uri,         type: "put",         data: requestdata,         processdata: false,         beforesend: function(xhr) {             xhr.setrequestheader('x-ms-blob-type', 'blockblob');             //xhr.setrequestheader('content-length', requestdata.length);         },         success: function (data, status) {             console.log(data);             console.log(status);             bytesuploaded += requestdata.length;             var percentcomplete = ((parsefloat(bytesuploaded) / parsefloat(selectedfile.size)) * 100).tofixed(2);             $("#fileuploadprogress").text(percentcomplete + " %");             uploadfileinblocks();         },         error: function(xhr, desc, err) {             console.log(desc);             console.log(err);         }     }); }            //create stored access permissions          microsoft.windowsazure.storage.blob.cloudblobclient blobclient = _storageaccount.createcloudblobclient();          //get reference container use sample code, , create if not exist.         microsoft.windowsazure.storage.blob.cloudblobcontainer container = blobclient.getcontainerreference("images-container");         container.createifnotexists();          //create new stored access policy , define constraints.         microsoft.windowsazure.storage.blob.sharedaccessblobpolicy sharedpolicy = new microsoft.windowsazure.storage.blob.sharedaccessblobpolicy()         {             sharedaccessexpirytime = datetime.utcnow.addminutes(10),             permissions = microsoft.windowsazure.storage.blob.sharedaccessblobpermissions.write         };          //get container's existing permissions.         microsoft.windowsazure.storage.blob.blobcontainerpermissions permissions = container.getpermissions();          //add new policy container's permissions.          if (!permissions.sharedaccesspolicies.containskey(cloudconfiguration.getconfigurationsetting("policyname")))         {             permissions.sharedaccesspolicies.clear();             permissions.sharedaccesspolicies.add(policyname, sharedpolicy);             container.setpermissions(permissions);         }           //generate sas locator        createstoredaccesspolicy(cloudconfiguration.getconfigurationsetting("policyname"));          //create blob client object.         microsoft.windowsazure.storageclient.cloudblobclient blobclient = _storageaccount.createcloudblobclient();          //get reference container use sample code, , create if not exist.         microsoft.windowsazure.storageclient.cloudblobcontainer container = blobclient.getcontainerreference("images-container");          //set expiry time , permissions container.         //in case no start time specified, shared access signature becomes valid immediately.         sharedaccesspolicy sasconstraints = new sharedaccesspolicy();          //generate shared access signature on container, setting constraints directly on signature.         string sascontainertoken = container.getsharedaccesssignature(sasconstraints, cloudconfiguration.getconfigurationsetting("policyname"));          var newfilefile = guid.newguid().tostring() + extension;         var bloburi = new uribuilder(container.absoluteuri.tostring() + sascontainertoken);          // return new videoasset          return new imageasset() { saslocator = bloburi.absoluteuri.tostring(), newfilename = newfilefile }; 

i testing in debug mode azure emulator on local machine. not sure if factor.

when establish stored access policy on container, may take 30 seconds take effect. during interval, shared access signature associated stored access policy fail status code 403 (forbidden), until access policy becomes active. more information on shared access policies, please take @ - https://msdn.microsoft.com/library/azure/dd179391.aspx.

so along ensuring generating right url mentioned above, please make sure wait 30 seconds before using policy.


Comments

Popular posts from this blog

c++ - No viable overloaded operator for references a map -

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - Cannot secure connection using TLS -