前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >input file文件上传(multiple)及FileReader:读取本地图片文件并显示

input file文件上传(multiple)及FileReader:读取本地图片文件并显示

作者头像
山河木马
发布2019-03-05 16:16:23
4.8K0
发布2019-03-05 16:16:23
举报
文章被收录于专栏:山河木马山河木马

FileReader:读取本地图片文件并显示

要想在页面上显示本地图片,以前我们通常的做法是将选择的图片文件上传至后端服务器,后端对其进行存储,再将图片的URL返回到前端,前端通过这个URL来显示图片。而HTML5的FileReader接口支持本地预览,FileReader接口主要是将文件读入内存,并提供相应的方法,来读取文件中的数据,当然就能显示本地图片不需上传了。目前高级浏览器实现了FileReader接口,所以像IE6这些老东西直接滚粗。

Javascript

通过getElementById获取节点,判断浏览器的兼容性,对于不支持FileReader接口的浏览器将给出一个提示并禁用input,否则监听input的change事件。

代码语言:javascript
复制
var result = document.getElementById("result"); 
var input = document.getElementById("file_input"); 
 
if(typeof FileReader==='undefined'){ 
    result.innerHTML = "抱歉,你的浏览器不支持 FileReader"; 
    input.setAttribute('disabled','disabled'); 
}else{ 
    input.addEventListener('change',readFile,false); 
}

然后,当file_input的change事件触发时,调用函数readFile()。在readFile中,我们首先获取file对象,然后通过file的type属性来检测文件类型,我们当然只允许选择图像类型的文件,然后我们new一个FileReader实例,并调用readAsDataURL方法来读取选中的图像文件,最后在onload事件中,获取到成功读取的文件内容,并以插入一个img节点的方式显示选中的图片。

代码语言:javascript
复制
function readFile(){ 
    var file = this.files[0]; 
    if(!/image\/\w+/.test(file.type)){ 
        alert("文件必须为图片!"); 
        return false; 
    } 
    var reader = new FileReader(); 
    reader.readAsDataURL(file); 
    reader.onload = function(e){ 
        result.innerHTML = '<img src="'+this.result+'" alt=""/>' 
    } 
} 

怎么样,可以看来我们并没有和后台交互就能将本地图片显示在页面中,最后我们来了解下FileReader的方法和事件。

FileReader的方法和事件

参数/事件

描述

方法

abort

中断读取

readAsText(file, [encoding])

将文件读取为文本 该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。

readAsBinaryString(file)

将文件读取二进制码 通常我们将它传送到后端,后端可以通过这段字符串存储文件

readAsDataURL(file)

将文件读取为DataURL 将文件读取为一串Data URL字符串,将小文件以一种特殊格式的URL地址直接读入页面。小文件指图像与html等格式的文件。

事件

onabort

数据读取中断时触发

onerror

数据读取出错时触发

onloadstart

数据读取开始时触发

onload

数据读取成功完成时触发

onloadend

数据读取完成时触发,无论成功失败

HTML5中多文件上传时如何客户端控制文件个数和大小

代码语言:javascript
复制
var files=document.getElementsByName('picfile').files, fs=files.length, s=0;
if(fs >10 ){
 alert("上传的文件数量超过10个了!请重新选择!");    
}else{
 for(var i=0;i<fs;i++){
 if(files[i].size > 1024*1024){
 alert('"'+files[i].name + "这个文件大于1M!请重新选择!");
 }
 }
}

实例

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="jquery.js"></script>
</head>
<body>
    <input type="file" multiple id="inputs"/>        //multiple(多文件上传)
<div id='dd'></div>
 
<script>
$(document).ready(function () {
    $("#inputs").change(function () {
        var fil = this.files;
        for (var i = 0; i < fil.length; i++) {
            reads(fil[i]);
        }
    });
});
function reads(fil){
    var reader = new FileReader();
    reader.readAsDataURL(fil);
    reader.onload = function()
    {
        document.getElementById("dd").innerHTML += "<img src='"+reader.result+"'>";
    };
}
</script>
</body>
<html>
学习地址

http://www.jb51.net/article/95646.htm

https://segmentfault.com/q/1010000008359098?_ea=1629710

http://www.helloweba.com/view-blog-224.html

http://www.cnblogs.com/tjzhangjianjun/p/5670972.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/02/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FileReader:读取本地图片文件并显示
    • Javascript
      • FileReader的方法和事件
      • HTML5中多文件上传时如何客户端控制文件个数和大小
      • 实例
        • 学习地址
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档