在Javascript中从BLOB URL读取数据

Ho1*_*Ho1 2 javascript url blob download

我有一个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);
Run Code Online (Sandbox Code Playgroud)

在JSFiddle中看到:

https://jsfiddle.net/7spry3jn/

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

Joe*_*zen 7

您可以使用downloadattr in anchor元素,强制下载,您不需要重新创建另一个blob.

但您需要关注浏览器支持,请参阅此处所有接受downloadattr 的浏览器:我可以使用

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);
Run Code Online (Sandbox Code Playgroud)

要阅读您的内容,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);
Run Code Online (Sandbox Code Playgroud)
<p id="text"></p>
Run Code Online (Sandbox Code Playgroud)