【发布时间】:2016-04-23 05:03:00
【问题描述】:
我需要将文件从浏览器上传到我的 Google 云端硬盘。这是我的上传代码:(files 是从<input type="file"> 获取的文件数组)
var boundary = "foo_bar_baz";
const delimiter = "\r\n--" + boundary + "\r\n";
const close_delim = "\r\n--" + boundary + "--";
var contentType = doc.mimeType;
var metadata = {
"title": doc.name,
"mimeType": doc.mimeType
};
var reader = new FileReader();
reader.onload = function(e){
var multipartRequestBody =
delimiter + 'Content-Type: application/json\r\n\r\n' +
JSON.stringify(metadata) +
delimiter + 'Content-Type: ' + contentType + '\r\n' + '\r\n' +
e.target.result +
close_delim;
$.ajax({
url: 'https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart',
type: 'POST',
headers: {
"Authorization": 'Bearer ' + luminDriveAccessToken,
"Content-Type": 'multipart/related; boundary="'+ boundary + '"'
},
success: function() {
console.log('>>> Done uploading.');
},
error: _handleUploadErrors,
data: multipartRequestBody,
cache: false,
contentType: false,
processData: false,
crossDomain: true
});
};
reader.readAsBinaryString(files[0]);
当我运行此脚本时,文件已上传到我的 Google Drive(正确的标题,正确的 mimeType),但文件内容已损坏(Google Drive 无法打开它)。当我将文件下载到我的计算机时,我也无法打开它,并且 我意识到下载的文件的大小比原始文件的大小略大 (例如 .docx 文件: 15.4KB 与 11.3KB 相比)。
所以我猜这个问题与发送到服务器之前的文件内容有关。但我还不知道如何修复它。希望大家帮忙!
【问题讨论】:
-
您是否尝试过使用 FormData API 提交?
-
我没有(事实上我不知道怎么做)。我只是按照这里的 API:developers.google.com/drive/v2/web/manage-uploads
标签: jquery google-drive-api multipart