首先,如果我说的话没有任何意义,请允许我道歉。我在这里远离了我的舒适区,并且不知道我在做什么。随着那说......
我使用Google Drive File Picker library允许用户从他们的Google云端硬盘上传他们的简历。
function downloadGDriveFile(file) {
if (file.downloadUrl) {
var accessToken = gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open('GET', file.downloadUrl);
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.onload = function () {
var content = xhr.response;
console.log(xhr);
form_element = document.getElementById("new_guest_application");
form_data = new FormData(form_element);
new_file = new File([content], file.title, {type: file.mimeType});
form_data.append('guest_application[curriculum_vitae]', new_file);
console.log(new_file);
var request = new XMLHttpRequest();
request.open("POST", form_element.action);
request.send(form_data);
};
xhr.onerror = function () {
alert('Download failure.');
};
xhr.send();
}
else {
alert('Unable to download file.');
}
}
使用上面的代码,我接受所选的file
对象并使用它以及相关的标头令牌来下载文件的content
。这似乎按预期工作。
我的问题出现在尝试将所述内容转换为File
以附加到表单并提交到我的服务器时。
上面的代码可以工作,只要服务器接受文件并相应地上传,但所述文件已损坏。我想象这是因为我对file = new File([content], file.title, {type: file.mimeType});
行做错了,但我到目前为止还在我的舒适区之外,我甚至都不知道在哪里开始。
(作为一项规则,我不会做很多JavaScript,只能通过健康的复制/粘贴试用和错误来实现这一目标)
有人可以帮帮我吗?感谢。
答案 0 :(得分:2)
xhr.response
将返回一些格式,具体取决于xhr.responseType
中定义的数据类型。
如果您携带二进制数据,并且responseType
设置为文本类型,则您的数据将会损坏。
您可以在阅读回复之前尝试覆盖xhr.responseType
xhr.responseType = "arraybuffer";
var content = xhr.response;