2014-09-02 37 views
0

我正在使用Azure存儲API,我的網址是SAS,以及捕獲的代碼是PhoneGap的手機的照片,音頻或視頻。使用JavaScript和REST API從Azure存儲中爲PhoneGap上傳文件

當手機存儲照片,音頻,視頻......給我一個路線。

我有我的設備上的本地文件,問題是......它應該如何上傳我的文件? Bytes,base64 ...正在尋找這方面的文檔,但無法找到。

我正在使用的附件代碼上傳文件,而不是如果它是正確的。 我的問題是「數據」,這應該是

$.ajax({ 
      url: uri, 
      type: "PUT", 
      data: requestData, 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob'); 
      }, 
      success: function (data, status) { 
       console.log(data); 
       console.log(status); 
      }, 
      error: function(xhr, desc, err) { 
       console.log(desc); 
       console.log(err); 
      } 
     }); 

回答

0

的數據應該在bytes。不知道你是否可以使用HTML 5的File API,但如果你這樣做,你可以簡單地使用它來讀取文件內容作爲數組緩衝區,然後將其轉換爲unsigned int數組並將其傳遞到您的上傳例程。以下是此博客帖子中的示例代碼:http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/。記住

var reader = new FileReader(); 
var fileContent = selectedFile.slice(currentFilePointer, currentFilePointer + maxBlockSize); 
reader.readAsArrayBuffer(fileContent); 

reader.onloadend = function (evt) { 
    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); 
      } 
     }); 
    } 
}; 

一個重要的事情是SE processData標誌Ajax請求false(默認爲true),否則數據將被破壞。

+0

嗨Gaurav,我不使用HTML5 API。它之前已經審查過你的文章,但是因爲我沒有使用過......我不太明白。另外我對英語不好 – Pit 2014-09-09 04:54:23