2014-09-02 1 views
0

Azure Storage API로 작업하고 있으며 SAS에서 URL을 가지고 있으며 PhoneGap이 포함 된 휴대 전화의 사진, 오디오 또는 비디오를 캡처하는 코드도 있습니다. .JavaScript 및 REST API를 사용하여 PhoneGap 용 Azure 저장소에서 파일 업로드

휴대 전화에서 사진, 오디오, 비디오를 저장하면 ... 경로를 제공합니다.

내 장치에 로컬 파일이 있는데 질문은 ... 내 파일을 어떻게 업로드해야합니까? 바이트, 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을 사용할 수 있는지 확신 할 수 없지만 단순히 배열 버퍼로 파일 내용을 읽은 다음이를 부호없는 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); 
      } 
     }); 
    } 
}; 

한 가지 중요한 것은, 그렇지 않으면 데이터가 손상됩니다 (기본값은 true입니다) false에 아약스 요청 자체 processData 플래그입니다.

+0

안녕 Gaurav, HTML5 API를 사용하지 않습니다. 이전에 이미 기사를 검토했지만 사용하지 않았기 때문에 ... 나는 잘 이해하지 못합니다. 게다가 나는 영어로 잘하지 않는다. – Pit