文件API无法在Google Chrome扩展程序中使用Blob

时间:2012-05-02 11:20:24

标签: javascript html5 google-chrome google-chrome-extension google-chrome-os

我正在为Google Chrome编写扩展程序,我需要下载页面图像并将其保存在临时文件的磁盘上。为此,我创建了一个XMLHttpRequest并使用它来下载图像。在回调函数中,当我在request.response中有图像时,我使用window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024 * 20, writeImageToFile, errorHandler)从Windows请求一个临时文件。在回调函数writeImageToFile中,我创建了FileWriter对象并将blob写入其中。该文件正在创建,但我无法找到它的创建位置。我需要扩展名的文件的Windows路径。请帮忙!

1 个答案:

答案 0 :(得分:1)

出于您的目的,您不需要虚拟文件系统。使用webkitURL.createObjectURL方法从blob创建URL:

window.webkitURL.createObjectURL(blob);

从Chrome 19开始,您可以使用Blob直接获取responseType个对象:

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