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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PowerBuilder — 条码打印

    PowerBuilder — 条码打印#使用ocx控件使用微软的MSBCODE9.OCX,但是注册老不成功,需要安装office之后才能注册成功,不知道有没有好的处理方法??#使用字体字体下载:http://download.csdn.net/detail/easyboot/9452777字符转换:代码来源http://club.excelhome.net/thread-606919-1-1.html…

    2022年7月26日
    14
  • arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例

    arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例[1.rar]-QQ连连看的源码.单消秒杀挂机等功能喜欢的朋友请拿去研究[qqCHAR.rar]-qq验证码识别程序可以叫准确的识别出qq登陆前的验证码[1.rar]-本书以Visualc++作为开发语言,结合大量实例,详细介绍了利用Arcobjects组件进行GIS二次开发的方法和过程。书中在讲述利用Arcobjects实现GIS功能的基础上,重点介绍了在Arcobjects环境…

    2022年6月17日
    25
  • C语言数组初始化及malloc初始化

    C语言数组初始化及malloc初始化前言做笔试题的时候老有些小错误 来总结一下 数组赋值初始化的三个方式 1 0 初始化例如 intnums 3 0 但是经常出现的是给定长度 变量 然后需要进行初始化 如果写成下式 intmain intnumsSize 0 scanf d amp numsSize intnums numsSize 0 则会出现以下报错信息 error variable sizedobjectm

    2025年7月16日
    4
  • Intellij idea 报错:Error : java 不支持发行版本5

    在Intellijidea中新建了一个Maven项目,运行时报错如下:Error:java不支持发行版本5本地运行用的是JDK9,测试Java的Stream操作,报错应该是项目编译配置使用的Java版本不对,需要检查一下项目及环境使用的Java编译版本配置。《1》在Intellij中点击“File”–&gt;“ProjectStr…

    2022年4月8日
    39
  • Java Scanner类的常用方法及用法(很详细)

    Java Scanner类的常用方法及用法(很详细)JavaScanner类的方法及用法(很详细)Scanner类简介Java5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除…

    2022年7月7日
    25
  • Pycharm导入第三方模块的方法「建议收藏」

    Pycharm导入第三方模块的方法「建议收藏」转载网址:http://www.th7.cn/Program/Python/201510/664230.shtml

    2022年8月26日
    8

发表回复

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

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