项目中关于图片上传与剪裁的流程

发布于:2022-12-16 ⋅ 阅读:(248) ⋅ 点赞:(0)

1.文件的上传主要是基于<ipt type="file">的属性 点击(点击行为则是通过在ipt上绑定ref=“名字”属性获取元素,然后在点击的时候$refs.名字.click()去模拟点击)之后就可以上传文件了

注意:需要把利用ipt的hidden属性将ipt框隐藏起来,不让其在页面展示

其中accept属性是允许接收的文件类型,multiple允许传入多个文件。

2.如何获取选择以后的图片的值,通过给ipt绑定change事件监视变化,进而去获取我们传入图片的值(但是不要使用.value,因为不同的操作系统可能会出现错误)一般使用元素本身的files伪数组(this.$refs.名字.files[0]),获得的二进制对象。

3.当我们得到二进制对象以后,我们要知道(我们编辑图片的位置)图片的src属性只能识别两种类型 正常的src和Base64所以我们要将我们得到的二进制对象转换成Base64编码格式。

4.如何将二进制对象----->Base64 就要利用JS中的文件阅读器(FileReader)他是一个构造函数 使用的话创建即可。(示例如下)

eg:

1.const fr = new FileReader()

2.fr.readAsDataURL(file)传入要读取的二进制对象

3.由于其是异步操作 所以接收结果需要

Fr.onload = (e)=>{ e.target.result} 其中 e.target.result就是得到的Base64

由于上述代码,复用性不高,因此可以将我们转换的过程抽离出来单独封装成一个函数,使用时直接导入调用即可 封装如下

异步调用即可

过程中会遇到两个bug

第一个是:当你选中了一张图片然后你又选中它的时候

不能够选中这时候只需要将ipt的value置空即可 this.$refs.名字.value=‘’

第二个是:当你选中一张图片时选中其他的 会被原来的图片遮住,这是因为我们剪裁插件的原因,只需要通过v-if让上传图片的组件销毁再创建就行

关于剪裁图片的插件的使用 网址:cropperjs实践及中文文档(自译) - 灭灭 - 博客园 (cnblogs.com)

插件使用:

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到