簡體   English   中英

文件API無法在Google Chrome擴展程序中與Blob一起使用

[英]File API not working with Blob in Google Chrome Extension

我正在編寫Google Chrome瀏覽器擴展程序,需要在其中下載頁面圖像並將其保存在磁盤上的臨時文件中。 為此,我創建一個XMLHttpRequest並使用它來下載圖像。 在回調函數中,當圖像包含在request.response中時,我使用window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024 * 20, writeImageToFile, errorHandler)從Windows請求一個臨時文件。 在回調函數writeImageToFile中,我創建FileWriter對象並將blob寫入其中。 該文件正在創建中,但是我無法找到它的創建位置。 我需要擴展名文件的Windows路徑。 請幫忙!

為了您的目的,您不需要虛擬文件系統。 使用webkitURL.createObjectURL方法從Blob創建URL:

window.webkitURL.createObjectURL(blob);

從Chrome 19開始,您可以使用responseType直接獲取Blob對象:

var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function() {
    // xhr.response is a Blob
    var url = webkitURL.createObjectURL(xhr.response);
    console.log('URL: ', url);
};
xhr.open('GET', 'http://example.com/favicon.ico');
xhr.send();

從Chrome 10開始,您可以獲得ArrayBuffer響應,並將其轉換為blob( demo ):

var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
    // Create blob from arraybuffer
    var bb = new (window.BlobBuilder || window.WebKitBlobBuilder)();
    bb.append(xhr.response);
    var url = webkitURL.createObjectURL(bb.getBlob());
    console.log('URL: ', url);
};
xhr.open('GET', 'http://example.com/favicon.ico');
xhr.send();

(如果要對Firefox使用相同的代碼,請使用window.URLMozBlobBuilder )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM