我正在創建使用Google Drive API的Google Chrome擴展程序。 我必須上傳帶有HTML5的文件。使用HTML5將文件上傳到Google Drive API
對於文本文件,沒有問題。但是當我想上傳二進制文件時,總會有錯誤。
因此,當我使用HTML5中的FileReader作爲BinaryString上傳文件時,我的圖像已損壞,無法讀取它。
當我使用Base64編碼(在正文部分「Content-Transfer-Encoding:base64」中),我有一個400錯誤請求 - >格式錯誤的多部分主體。
你能幫助我嗎? 謝謝:)
PS:我不想使用Google Drive SDK,我更喜歡寫所有的代碼。
var bb, reader;
var meta = {
"title": "mozilla.png",
"mimeType": "image/png",
"description": "Mozilla Official logo"
};
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://developer.mozilla.org/media/img/mdn-logo-sm.png', true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e){
if(this.status == 200){
bb = new WebKitBlobBuilder();
bb.append(this.response);
console.log('Download OK');
reader = new FileReader();
reader.readAsDataURL(bb.getBlob('image/png'));
reader.onloadend = function(e){
console.log('Reader OK');
var bound = 287032396531387;
var parts = [];
parts.push('--' + bound);
parts.push('Content-Type: application/json');
parts.push('');
parts.push(JSON.stringify(meta));
parts.push('--' + bound);
parts.push('Content-Type: image/png');
parts.push('Content-Transfer-Encoding: base64');
parts.push('');
parts.push(reader.result);
parts.push('--' + bound + '--');
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart", true);
xhr.setRequestHeader("Authorization", "Bearer token123456");
xhr.setRequestHeader("Content-Type", "multipart/mixed; boundary=" + bound);
xhr.onload = function(e){
console.log("DRIVE OK", this, e);
};
xhr.send(parts.join("\r\n"));
}
}
};
xhr.send();
二進制上傳,只需修改這一行:
reader.readAsDataURL(bb.getBlob('image/png'));
由
reader.readAsBinaryString(bb.getBlob('image/png'));
,並刪除這一行:
我試圖創建一個文件通過首先發送元數據並上傳廣告在這個post後的內容一樣,我總是得到一個404錯誤上傳內容,但這是另一個故事...
我試過了,但它仍然不起作用。如果你想測試,像[POSTMAN Rest客戶端](https://chrome.google.com/webstore/detail/fdmmgilgnpjigdojojpjoooidkmcomcm)一樣安裝一個完全可以上網的應用程序(用於XHR),並將代碼粘貼到Chrome Developer的控制檯中工具。如果您需要令牌,請轉到[Google OAuth Playground](https://code.google。com/oauthplayground) – 2012-08-13 11:37:03
在編輯答案中添加了我的解決方案 – KiL 2012-08-13 15:33:16
你只是一個JavaScript忍者,謝謝你! – 2012-08-13 17:58:21