【发布时间】:2014-01-23 21:44:02
【问题描述】:
我有一个文件输入:(jsbin)
<input type="file" accept="image/*" id="input" multiple onchange='handleFiles(this)' />
Which, when file selected, shows small images of the selected image:
我可以通过两种方式:
使用 FileReader:
function handleFiles(t) //t=this
{
var fileList = t.files;
for (var i = 0; i < fileList.length; i++)
{
var file = fileList[i];
var img = document.createElement("img");
img.style... = ...
document.getElementById('body').appendChild(img);
var reader = new FileReader();
reader.onload = (function (aImg)
{
return function (e)
{
aImg.src = e.target.result;
};
})(img);
reader.readAsDataURL(file);
}
// ...
}
使用 ObjectURL / BLOB :
function handleFiles(t)
{
var fileList = t.files;
for (var i = 0; i < fileList.length; i++)
{
var file = fileList[i];
var img = document.createElement("img");
img.src = window.URL.createObjectURL(file);
img.onload = function (e)
{
window.URL.revokeObjectURL(this.src);
}
document.getElementById('body').appendChild(img);
}
}
如您所见,两者都有效:
但是
html结果不同:
问题:
有了第一个,我已经知道我能做什么了,它是纯 data-uri 数据。
但是我什么时候应该使用第二种方法(blob)?
我的意思是 - 我能做什么blob:http%3A//run.jsbin.com/82b29cc5-8452-4ae2-80ca-a949898f4295 ?
附言
mdn 关于 URL.createObjectURL 的解释并不能帮助我了解何时应该使用它们。
【问题讨论】:
标签: javascript html blob fileapi