0

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

4

1 回答 1

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(演示):

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.URL和)。MozBlobBuilder

于 2012-05-02T11:26:59.753 回答