使用Javascript中的Dropbox Core API将文件上传到Dropbox

我正在开发一个简单的chrome扩展,需要将文件上传到用户的dropbox文件夹。 我正在使用如下所述的简单AJAX请求来上传文件,但它适用于具有.txt, .json, .c, etc扩展名的文件.txt, .json, .c, etc即其mime typetext/plain类型或类似类型但所有其他类型的文件文件类型如pdfs,图像文件等被破坏并产生空白内容。 在以正确的方式上传文件时我缺少什么。

 function startUpload() { var folderPath = $(this).closest('tr').attr('path')+'/'; var file = $("#upload_file")[0].files[0]; if (!file){ alert ("No file selected to upload."); return false; } var reader = new FileReader(); reader.readAsText(file, "UTF-8"); reader.onload = function (evt) { uploadFile(folderPath+file.name,evt.target.result,file.size,file.type); } } //function to upload file to folder function uploadFile(filepath,data,contentLength,contentType){ var url = "https://api-content.dropbox.com/1/files_put/auto"+filepath; var headers = { Authorization: 'Bearer ' + getAccessToken(), contentLength: contentLength, }; var args = { url: url, headers: headers, crossDomain: true, crossOrigin: true, type: 'PUT', contentType: contentType, data : data, dataType: 'json', success: function(data) { getMetadata(filepath.substring(0,filepath.lastIndexOf('/')),createFolderViews); }, error: function(jqXHR) { console.log(jqXHR); } }; $.ajax(args); } 

我相信问题是reader.readAsTextFile(file, "UTF-8") 。 如果文件不是文本文件,则会误解内容。 我你想要reader.readAsBinaryStringreader.readAsArrayBuffer 。 (我自己没有测试过。)

编辑

在我自己测试之后,我发现readAsArrayBuffer是你需要的,但你还需要添加processData: false作为$.ajax一个选项,以防止jQuery尝试将数据转换为表单提交中的字段。

还要确保使用dataType: 'json'来正确解析来自服务器的响应。