Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Blob URL创建下载链接_Javascript_Html_Google Chrome Extension - Fatal编程技术网

Javascript 从Blob URL创建下载链接

Javascript 从Blob URL创建下载链接,javascript,html,google-chrome-extension,Javascript,Html,Google Chrome Extension,在我正在使用的Google chrome扩展中,一个文件是从服务器上下载的,带有XMLHttpRequest。此文件包含一些二进制数据,这些数据存储在ArrayBuffer对象中。为了提供下载此文件的可能性,我正在使用createObjectURLAPI function publish(data) { if (!window.BlobBuilder && window.WebKitBlobBuilder) { window.BlobBuilder = window.

在我正在使用的Google chrome扩展中,一个文件是从服务器上下载的,带有
XMLHttpRequest
。此文件包含一些二进制数据,这些数据存储在
ArrayBuffer
对象中。为了提供下载此文件的可能性,我正在使用
createObjectURL
API

function publish(data) {
  if (!window.BlobBuilder && window.WebKitBlobBuilder) {
    window.BlobBuilder = window.WebKitBlobBuilder;
  }
  var builder = new BlobBuilder();
  builder.append(data);
  var blob = builder.getBlob();
  var url = window.webkitURL.createObjectURL(blob);
  $("#output").append($("<a/>").attr({href: url}).append("Download"));
函数发布(数据){
if(!window.BlobBuilder&&window.WebKitBlobBuilder){
window.BlobBuilder=window.WebKitBlobBuilder;
}
var builder=new BlobBuilder();
附加(数据);
var blob=builder.getBlob();
var url=window.webkitURL.createObjectURL(blob);
$(“#输出”).append($(“”).attr({href:url}).append(“下载”);
}


它运转良好;除了文件名是不透明的UUID,如
9a8f6a0f-dd0c-4715-85dc-7379db9ce142
。有没有办法强制将此文件名设置为更加用户友好的格式?

我以前从未尝试过,但应该可以创建一个新的文件对象(允许您指定文件名)并将blob写入其中。大致如下:

function publish(data, filename) {

    if (!window.BlobBuilder && window.WebKitBlobBuilder) {
        window.BlobBuilder = window.WebKitBlobBuilder;
    }

    fs.root.getFile(filename, {
        create: true
    }, function (fileEntry) {

        // Create a FileWriter object for our FileEntry (log.txt).
        fileEntry.createWriter(function (fileWriter) {

            fileWriter.onwriteend = function (e) {
                console.log('Write completed.');
            };

            fileWriter.onerror = function (e) {
                console.log('Write failed: ' + e.toString());
            };

            var builder = new BlobBuilder();
            builder.append(data);
            var blob = builder.getBlob();
            fileWriter.write(blob);

        }, errorHandler);

    }, errorHandler);
}

我认为这对你来说是可行的。

你可以通过设置锚的“下载”属性强制使用任意文件名


请参阅:

谢谢,我们的解决方案有效。实际上我已经看过这个API了,但是FileEntry接口的toURL()方法似乎不起作用。在谷歌搜索之后,我发现这个方法在Chrome.BlobBuilder上被重命名为toURI(),已经过时了。使用Blob构造函数。