首先,請允許我道歉,如果我說什麼都沒有意義。我已經遠離了我的舒適區,不知道自己在做什麼。隨着這說...從XMLHttpRequest對象響應創建文件
我使用Google Drive File Picker library允許用戶從他們的谷歌驅動器上傳他們的簡歷。
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作爲一種規則,只設法與複製/粘貼試錯健康的劑量遠遠得到這個)
有人能幫助我嗎?謝謝。
丹尼爾之前覆蓋
xhr.responseType
,你應該告訴你如何處理文件上傳在服務器端也是如此。用一些已知內容的簡單文本文件(如「123456qwerty」)運行測試並查看文件的損壞情況也是有意義的。乍看之下,您的客戶端代碼看起來不錯。 – SergGr