input file读取文件

input file读取文件js读取inputfile文件的两种方式:<divid="localImag"><imgid="preview"src=""width="150"height="180"style="display:block;width:150px;height:180px;"><

大家好,又见面了,我是你们的朋友全栈君。

js读取 input file 文件的两种方式:

<div id="localImag">
    <img id="preview" src="" width="150" height="180" style="display: block; width: 150px; height: 180px;">
    <input type="file" name="img" id="docfile" style="width:150px;" onchange="setImagePreview();">
</div>

1.使用FileReader读取图片(转化为base64)

function setImagePreview() {
        var docObj = document.getElementById("docfile");
        var imgObjPreview = document.getElementById("preview");
        console.log(docObj.files[0])
        if (docObj.files && docObj.files[0]) {
            var reader = new FileReader();
            reader.readAsDataURL(docObj.files[0]);//发起异步请求
            reader.onload = function(){
                //读取完成后,数据保存在对象的result属性中
                // console.log(this.result)
                imgObjPreview.src=this.result
            }
        }
}

主要使用readAsDataURL去完成转换base64,如果是文档,也可以用readAsText(file,encoding)去读取。

方法

FileReader提供了如下方法:

readAsArrayBuffer(file) 按字节读取文件内容,结果用ArrayBuffer对象表示
readAsBinaryString(file) 按字节读取文件内容,结果为文件的二进制串
readAsDataURL(file) 读取文件内容,结果用data:url的字符串形式表示
readAsText(file,encoding) 按字符读取文件内容,结果用字符串形式表示
abort() 终止文件读取操作

readAsDataURL和readAsText较为常用,这里只对这两者进行说明。

2.使用 window.URL.createObjectURL  读取图片(转化为blod)(推荐)

function setImagePreview() {
        var docObj = document.getElementById("docfile");
        var imgObjPreview = document.getElementById("preview");
        console.log(docObj.files[0])
        if (docObj.files && docObj.files[0]) {
            imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
        }
}

总结

按照前辈们的说法,creatObjectURL可以有更好的性能,或许是浏览器自带接口的原因, 可以处理的更快。 

而且最近做了一个需要上传图片预览的项目,用的最简单的input file上传,最开始想到的就是用filereader实现前端预览,很简单,见前面的第一段代码,在自己手机上测试,没问题。但在某些奇葩手机上,比如oppo 安卓4.3在我们app的webview内通过打开相册上传发现无法预览图片!但在该手机的微信,浏览器内上传均可以!所以推荐使用window.URL.createObjectURL

最后如果需上传,可以使用form或者使用ajax上传,form表单提交比较简单,就不介绍。

ajax提交的时候原理还是获取到obj.files[0]后。利用实例化的FormData 上传文件。如:

let fileObj = this.$refs.fileObj.files[0]; // js 获取文件对象
 var formData = new FormData();
        formData.append('file', fileObj);
        axios({
          url: process.env.URL_PATH + '/mallSealApply/uploadSealApply',
          method: 'post',
          headers: {'Authorization': this.$store.state.token},
          data: formData
        })

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160972.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1045 Access denied for user ‘root’@’localhost’ (using password: YES)[通俗易懂]

    1045 Access denied for user ‘root’@’localhost’ (using password: YES)[通俗易懂]MySQL连接错误,使用Navicat连接MySQL出现错误:1045Accessdeniedforuser’root’@’localhost'(usingpassword:YES)解决方法:编辑mysql配置文件my.ini(在mysql的安装目录下,不同电脑可能不一样,参考目录①D:\ProgramFiles\MySQL\MySQLServer5.0\my….

    2022年5月13日
  • [Python知识图谱] 一.哈工大pyltp安装及中文分句、中文分词、导入词典基本用法

    [Python知识图谱] 一.哈工大pyltp安装及中文分句、中文分词、导入词典基本用法本系列文章主要结合Python语言实现知识图谱构建相关工程,具有一定创新性和实用性,非常希望各位博友交流讨论,相互促进成长。第一篇文章主要介绍哈工大pytltp工具,包括安装过程、中文分词、词性标注和实体识别等。基础性文章,希望对您有所帮助。

    2022年11月2日
  • 2021广西高考成绩排名查询,2020广西高考成绩排名,一分一段表,分数段排位查询,五分段统计表_一品高考网…「建议收藏」

    2021广西高考成绩排名查询,2020广西高考成绩排名,一分一段表,分数段排位查询,五分段统计表_一品高考网…「建议收藏」广西高考成绩排名,一分一段统2020年理工类一分一档表(总分=总成绩+全国性加分和地方性加分的…2019年文史+音乐类本科一分一档表(总分=总成绩+全国性加分)说…2019年文史+书法类本科一分一档表(总分=总成绩+全国性加分)说…2019广西高考美术类本科,专科一分一档表(总分=总成绩+全国性加…2019年广西高考体育类本科,专科一分一档表(总分=总成绩+全国性…2019…

    2022年9月13日
  • 简述MD5加密[通俗易懂]

    简述MD5加密[通俗易懂]MD5加密publicclassMD5{ /**四个链接变量标准幻数(按大端字节序存储-高位字节排放在内存的低地址端(即该值的起始地址),低位字节排放在内存的高地址端)*/privatefinalintA=0x67452301;//01234567privatefinalintB=0xefcdab89;//89abcdef…

    2022年7月11日
  • Ubuntu中dpkg命令的用法[通俗易懂]

    Ubuntu中dpkg命令的用法[通俗易懂]dpkg是Debianpackage的简写,为”Debian“操作系统专门开发的套件管理系统,用于软件的安装,更新和移除。所有源自”Debian”的Linux的发行版都使用dpkg,例如”Ubuntu”阅读目录安装软件 列出与该包相关联的文件 显示包的版本 移除软件(保留配置) 移除软件(不保留配置) 查找包的详细信息 列出deb包的内容安装软件命令:dpkg-i<.debfilename>实例:dpkg-i~/Download/…

    2022年5月21日
  • Docker 启动redis镜像

    Docker 启动redis镜像查看本地所有容器:dockerps-a查看本地运行中的容器:dockerps查看所有镜像:dockerimagesdaocker启动redis镜像同时设置密码:dockerrun-d–nameredis1-p6379:6379redis–requirepass“gs123456”参数解释:-d:后台运行-name为容器的名字-p端口映射–requirepass:redis密码redis为镜像名…

    2022年9月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号