我尝试使用Javascript将文件从本地计算机上传到Google云端硬盘。因此,我运行本地Web服务器(python中的 simpleHTTPServer ),然后我使用Ajax请求来获取文件。根据我的理解,响应应该是二进制流。然后,我尝试使用分段上传将此二进制流上传到Google云端硬盘。
我已尝试在网上找到几个版本,但所有版本都失败了。你可以在下面看到其中三个。结果,一个文件出现在Google云端硬盘中,其名称正确,但其内容只是一个文字说明了#34;对象Blob&#34;或&#34; Object Arraybuffer&#34;当我使用 blob 或 arraybuffer 作为<= 0
或使用responseType
属性而没有指定responseText
的空文件时。
我做错了什么? 提前谢谢。
responseType
另:
function uploadFile_multipart (foldername, filename) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", foldername + filename, false);
xmlhttp.overrideMimeType('text\/plain; charset=x-user-defined');
xmlhttp.send();
if (xmlhttp.status == 200) {
var contentType = xmlhttp.getResponseHeader('Content-Type');
var contentLength = xmlhttp.getResponseHeader('Content-Length');
var contentData = xmlhttp.responseText;
const boundary = 'foo_bar_baz';
var multipartRequestBody = '--' + boundary + '\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n' +
'{ "name": "' + filename + '", "mimeType": "' + contentType + '" }\r\n\r\n--' + boundary +
'\r\nContent-Type: ' + contentType + '\r\n\r\n' +
contentData + '\r\n--' + boundary + '--';
var request = gapi.client.request({
'path': '/upload/drive/v3/files',
'method': 'POST',
'params': {'uploadType': 'multipart'},
'headers': {'Content-Type': 'multipart/related; boundary=' + boundary, 'Content-Length': contentLength},
'body': multipartRequestBody
});
request.execute(function(resp) { alert(resp); });
}
}
又一个:
function uploadFile_multipart (foldername, filename) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onload = function() {
var contentType = xmlhttp.getResponseHeader('Content-Type');
var contentLength = xmlhttp.getResponseHeader('Content-Length');
var contentData = xmlhttp.response;
const boundary = 'foo_bar_baz';
var multipartRequestBody = '--' + boundary + '\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n' +
'{ "name": "' + filename + '", "mimeType": "' + contentType + '" }\r\n\r\n--' + boundary +
'\r\nContent-Type: ' + contentType + '\r\n\r\n' +
contentData + '\r\n--' + boundary + '--';
var request = gapi.client.request({
'path': '/upload/drive/v3/files',
'method': 'POST',
'params': {'uploadType': 'multipart'},
'headers': {'Content-Type': 'multipart/related; boundary=' + boundary, 'Content-Length': contentLength},
'body': multipartRequestBody
});
request.execute(function(resp) { alert(resp); });
}
xmlhttp.open("GET", foldername + filename, true);
xmlhttp.responseType = "blob";
xmlhttp.send();
}