上传文件input,file的图片问题(vue)

这篇博客介绍了如何通过JavaScript的FileReader API将上传的文件转换为BASE64格式,以便在img标签中预览图片。文章详细解释了隐藏input[type=file]、监听change事件、使用FileReader的readAsDataURL方法以及处理onload事件的过程,确保用户在未选择图片时能显示默认图片。
摘要由CSDN通过智能技术生成

设置上传文件input ,type="file",因为样式不好看我们现在多半是display: none给隐藏 然后自定义属性,在给个change事件

然后设置button 当点击的时候根据获取的自定义事情会触发input的change事件

触发change事件 " changeImg "函数

changeImg(e){

console.log(e) 是input ,type="file" 里面有个target.files的伪数组存放上传后的照片

}

const files = e.target.files 存下(免得打那么长)

照理说我们拿到了图片 files[0] 存储一个变量 例如avatar里面 可以使用在img src上

<img :src="avatar" alt="">

但是! 但是!! 不行

因为 img 标签的 src 只能设置 URL 和 BASE64

所以我们只有将获取到的文件 file 对象转换成 BASE64 或 URL

这里不得不补充input ,type="file" 里的 

FileReader -> 文件读取器 属性  :里面有几个方法,其中一个readAsDataURL()是转成BASE64格式

然后我们就可以开心的使用了

 // 使用方法:

        //1. 创建对象

        const fr = new FileReader()

       // 2. 读取文件

        fr.readAsDataURL(files[0])

        // 3. 获取读取的结果 事件绑定实现的

        因为文件读取是异步操作

         onload 事件: 当文件读取完成后执行

        fr.onload = (e) => {

          // console.log(e.target.result)

          // 4. 将结果赋值给 this.avatar

          this.avatar = e.target.result

        }

      } else {

        // 用户没有选择图片, 要显示默认图片

        this.avatar = ''

      }

这样就拿到了 BASE64 格式照片

只需要在

img设置src="avatar"就可以了,这里设置2个img,用户上传就是avatar里的,没上传就是默认的

 以上个人理解

另外 还可以利用webpack 来储存  路径 不过自己写有点小BUG 嘿嘿

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值