在上传图片的时候,通常想在本地先预览一下,看看选择的图片有没有问题,没问题再上传到服务器,避免服务器上产生冗余的文件,浪费资源。
本地图片预览,可以通过window.URL.createObjectURL(file)
或者 FileReader
来实现 ,随着浏览器的不断升级及标准更新,各主流浏览器也都支持这两个API了。
URL.createObjectURL()
URL.createObjectURL()
静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的 URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的 URL 对象表示指定的 File 对象或 Blob 对象。
语法objectURL = URL.createObjectURL(object);
在每次调用 createObjectURL()
方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL()
方法来释放。
FileReader
FileReader
对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。
FileReader.readAsDataURL()
开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个data: URL 格式的 Base64 字符串以表示所读取文件的内容。
示例
方法一,通过window.URL.createObjectURL
实现本地图片预览。
<input type="file" />
<img src="default" alt="图片预览" />
<script>
let $input = document.querySelector('input');
let $img = document.querySelector('img');
$input.addEventListener('change', function(e){
let file = e.target.files[0];
let imgUrl = window.URL.createObjectURL(file);
$img.src = imgUrl;
});
</script>
方法二,通过FileReader
实现本地图片预览。
<input type="file" />
<img src="default" alt="图片预览" />
<script>
let $input = document.querySelector('input');
let $img = document.querySelector('img');
$input.addEventListener('change', function(e){
let file = e.target.files[0];
let reader = new FileReader();
reader.onload=function(){
$img.src = reader.result;
};
reader.readAsDataURL(file);
});
</script>