2016-03-12 96 views
1

我有一些上傳文件到「OneDrive Api」的問題。使用Javascript發送文件到OneDrive API

我得到的URL來德的文件上傳:

$.ajax({ 
        type: "POST", 
        url: folderUrl, 
        headers: { 
         'Authorization': 'Bearer ' + access_token, 
         'Content-Type': 'application/json', 
        }, 
        success: {.....} 
}); 

而且它我得到的 「上傳的URL」。然後我讀和上傳用戶選擇文件(我需要片段文件):

var fileInput = $("#file"); 
var fileList = fileInput[0].files; 
var file = fileList[0]; 
content_length = file.size; 
inicio = 0; 
var blob = file.slice(inicio, content_length); 

fileReader.onloadend = function (evt) { 
    if (evt.target.readyState == FileReader.DONE) { // DONE == 2 
     var result = evt.target.result; 

     $.ajax({ 
      method: "PUT", 
      url: uploadUrl, 
      headers: { 
       'Authorization': 'Bearer ' + access_token, 
       'Content-Range': "bytes " + inicio + "-" + ((inicio + evt.target.result.length)-1) + "/" + content_length, 
      }, 
      data: result, 
      success: function (result) { 
       console.log("subió"); 
      }, 
      error: function (error) { 
       console.log("falló"); 
       console.log(JSON.stringify(error, null)); 
      } 
     }) 
     .done(function (msg) { 
      alert("Data Saved: " + msg); 
     }); 
    } 
}; 

fileReader.readAsBinaryString(blob); 

當我上傳文本文件內容,如

"Lorem ipsum dolor sit amet" (without special characters 'ñ', 'á', etc...)

的IT工作。

但是,當有特殊字符( 「N」, 「A」, 「¿」 ....)上傳文件顯示錯誤:

"code":"invalidRequest","message":"**Declared fragment length does not match the provided number of bytes**" 

有了這樣名爲 「.doc」,」文件。拉鍊「等等。

[編輯]:我注意到「á」改爲「á」(例如)。

我需要幫助:/

感謝

回答

0

這聽起來像一個編碼的問題,我的猜測是,罪魁禍首是readAsBinaryString。嘗試切換到readAsArrayBuffer,看看是否有幫助。

This answer goes into a lot more details.

+0

我試過了,但沒有工作:/ –