【问题标题】:Read data from BLOB URL in Javascript在 Javascript 中从 BLOB URL 读取数据
【发布时间】:2016-06-10 18:29:11
【问题描述】:

我有一个 BLOB URL,我想将它重新创建为第二个 BLOB URL,以便默认下载。

var blob1 = new Blob(["Hello world!"], { type: "text/plain" });
url1 = window.URL.createObjectURL(blob1);

blob2=new Blob([url1], {type: 'application/octet-stream'});
url2 = window.URL.createObjectURL(blob2);

var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url2;
a.click();
window.URL.revokeObjectURL(url);

在 JSFiddle 中查看:

https://jsfiddle.net/7spry3jn/

但这只会创建一个包含第一个 URL 的文本文件。如何从 Javascript 中的第一个 BLOB URL 读取数据并将其提供给创建第二个 BLOB?

【问题讨论】:

  • 为什么要创建第二个 blob?
  • @JoelRamosMichaliszen 第一个不强制下载。所以我必须创建第二个具有这种功能的。

标签: javascript url download blob


【解决方案1】:

您可以在anchor 元素中使用download attr,这会强制下载并且您不需要重新创建另一个blob。

但是您需要注意浏览器支持,请参阅此处所有接受downloadattr的浏览器:Can I Use

var blob1 = new Blob(["Hello world!"], { type: "text/plain" });
url = window.URL.createObjectURL(blob1);

var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.setAttribute("download","Any name");
a.click();
window.URL.revokeObjectURL(url);

要从Blob 读取内容,您可以像这样使用FileReader

var myBlob = new Blob(["Hello"], {type : "text/plain"});
var myReader = new FileReader();
//handler executed once reading(blob content referenced to a variable) from blob is finished. 
myReader.addEventListener("loadend", function(e){
    document.getElementById("text").innerHTML = e.srcElement.result;//prints a string
});
//start the reading process.
myReader.readAsText(myBlob);
<p id="text"></p>

【讨论】:

  • 谢谢。在 Google Chrome 中工作,但在 Firefox 中没有。我不知道为什么。顺便说一句,我这样做是为了下载几个 BLOB 网址。有没有更好的方法来完成这项工作?
  • 我不知道为什么 html5 下载对我来说在 Firefox 中不起作用。但是,谢谢。无论如何,你的解决方案拯救了我的一天!
猜你喜欢
  • 2013-02-21
  • 2020-03-20
  • 2018-06-15
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2019-04-12
  • 2011-12-27
  • 2017-01-24
相关资源
最近更新 更多