Roy*_*mir 20 javascript html5 blob fileapi
我有一个文件输入: (jsbin)
<input type="file" accept="image/*" id="input" multiple onchange='handleFiles(this)' />
Run Code Online (Sandbox Code Playgroud)
选择文件时,显示所选图像的小图像:
我可以用两种方式做到:
使用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);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,两者都有效:

但
html结果不同:

题 :
第一个,我已经知道我能做什么,它是纯粹的数据 - uri数据.
但什么时候应该使用第二种方法(blob)?我的意思是 - 我该blob:http%3A//run.jsbin.com/82b29cc5-8452-4ae2-80ca-a949898f4295怎么办?
ps
mdn解释关于URL.createObjectURL什么时候我不应该使用每个.
Rob*_*b W 39
blob:URL 的长度始终低于合理限制.
数据URL可以是任意大的.因此,当数据URL太长时,某些浏览器(IE,咳嗽)将不再显示图像.因此,如果要显示非常大的文件,使用blob:(或filesystem:URL)可能比数据URL更有意义.
此外,您还可以直接从恢复数据blob:URL (前提是一滴尚未撤销,例如,由于该文件是卸载,同源策略不被破坏)使用XMLHttpRequest.例如,以下代码将blob URL的内容作为文本获取:
var blobUrl = URL.createObjectURL(new Blob(['Test'], {type: 'text/plain'}));
var x = new XMLHttpRequest();
// set x.responseType = 'blob' if you want to get a Blob object:
// x.responseType = 'blob';
x.onload = function() {
alert(x.responseText);
};
x.open('get', blobUrl);
x.send();
Run Code Online (Sandbox Code Playgroud)
如果要使用文件将文件的内容提交给服务器XMLHttpRequest,则使用blob:或data:URL 实际上没有意义.只需File使用该FormData对象直接提交对象即可.如果您丢失了原始File引用,并且只有一个blob:URL,则可以使用上一个代码段Blob再次获取对象以供使用FormData.
给定data:-URL,恢复原始数据并不容易.Firefox和Opera 12-允许使用data:-URL XMLHttpRequest.Chrome,Internet Explorer,Safari和Opera 15+拒绝通过XMLHttpRequest加载数据网址.因此,关于恢复数据,blob:URL也优于data:-URL.
如果要在同一原点的不同帧中显示文件的结果,请务必使用blob:URL.如果要操纵Blob不同帧中的数据(可能位于不同的源),请不要使用blob或数据URL,直接使用发送数据postMessage.
blob:-URL通常比data:-URL 更好地表示(二进制)数据.对于小型数据(最大20KB),data:网址可能是一个更好的选择,因为较高的范围内支持的浏览器,即比较我可以用一滴的网址与我可以使用数据的URI (不过,如果你正在写一个复杂的HTML5应用程序,赔率是,你不会支持IE9-).
mar*_*are 12
以下是您使用这两种URL的主要区别:
FileReader数据,并且无法直接从URL中提取数据,如数据URL
这个列表看起来像数据URL是一个明显的优势,但BLOB网址创建速度更快,除非你需要将网址发送给其他用户或服务器,你应该使用它们,因为它们更快,更容易使用IE更易于管理,更好用.但是如果你确实需要向服务器或其他用户发送网址,我建议以某种方式直接使用XHR2传输blob.数据网址并不是那么好.
| 归档时间: |
|
| 查看次数: |
25521 次 |
| 最近记录: |