语法
objectURL = URL.createObjectURL(object);
参数
用于创建 URL 的 File 对象、Blob 对象或者 MediaSource 对象
返回值
一个DOMString包含了一个对象URL,该URL可用于指定源 object 的内容
作用
a
标签的 href
属性值,用于下载或链接到指定文件注意
示例:预览图片
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>预览图片</title>
<script>
window.onload = () => {
const fileElem = document.getElementById("fileElem"),
img = document.getElementById("img"),
file = fileElem.files[0],
url = window.URL.createObjectURL(file)
fileElem.addEventListener('change', ()=>{
img.src = url
}, false)
}
</script>
</head>
<body>
<input type="file" id="fileElem" accept="image/*">
<img id="img" src="" width="400px">
</body>
</html>
语法
instanceOfFileReader.readAsDataURL(blob);
参数
即将被读取的 Blob 或 File 对象
返回值
一个DOMString包含了一个对象URL,该URL可用于指定源 object 的内容
作用
注意
示例:多图预览
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>多图预览</title>
<script>
function previewFiles() {
var preview = document.querySelector('#preview');
var files = document.querySelector('input[type=file]').files;
function readAndPreview(file) {
var reader = new FileReader();
reader.addEventListener("load", function () {
var image = new Image();
image.height = 100;
image.title = file.name;
image.src = this.result;
preview.appendChild( image );
}, false);
reader.readAsDataURL(file);
}
if (files) {
[].forEach.call(files, readAndPreview);
}
}
</script>
</head>
<body>
<input id="browse" type="file" onchange="previewFiles()" accept="image/*" multiple>
<div id="preview"></div>
</body>
</html>
返回值
FileReader.readAsDataURL(blob)可以得到一段base64编码的字符串
URL.createObjectURL(blob)得到的是当前文件的一个内存url
内存清理
FileReader.readAsDataURL(blob)依照js垃圾回收机制自动从内存中清理
URL.createObjectURL(blob)存在于当前document内,清除方式只有upload()事件或者revokeObjectURL()手动清除
执行方式
FileReader.readAsDataURL(blob)通过回调的方式返回,异步执行
URL.createObjectURL(blob) 直接返回,同步执行
多文件处理
FileReader.readAsDataURL(blob)同时处理多个文件时,需要一个文件对应一个FileReader对象
URL.createObjectURL(blob) 依次返回,没有影响