基于vue框架下使用Element-UI获取文件MD5值并上传

基于vue框架下使用Element-UI获取文件MD5值并上传

使用插件: spark-md5

.vue页面

<el-upload
	class="avatar-uploader idcard"
	:action="imgdataUploadUrl"
	ref="frontImg"
	:data="imgdata"
	:show-file-list="false"
	:auto-upload="false" 
	:on-success="handleAvatarSuccess"
	:before-upload="beforeImgUpload"
	:on-change="onFrontImgChange">
	<img v-if="persform.frontImg" :src='getimage(persform.frontImg)' class="avatar">
	<img v-else src="@/assets/Images/idcard1.png" class="avatar">
	<p style="margin:0" class="sp-99">正面</p>
</el-upload>

因为API接口上传需要文件的md5及后缀名,所以绑定:data = imgdata来携带请求参数。文件md5值在:on-change的钩子函数中获取并赋值到imgdata中。

标与之对应的.js文件

  1. 引入 spark-md5,如果不频繁使用的话无需在main.js中使用
import SparkMD5 from 'spark-md5'
  1. 利用element-ui上传组件中的on-change来监听文件,在文件发生改变时计算文件的md5值
onFrontImgChange:function(file, fileList){
	//console.log(file)
	const _this = this  
	var fileReader = new FileReader();
	//此处打印file可看到file下的raw为文件属性
	var dataFile = file.raw;
	let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
	var spark = new SparkMD5.ArrayBuffer();
	//获取文件二进制数据
	fileReader.readAsArrayBuffer(dataFile)

	//异步执行函数
	fileReader.onload = function(e){
	spark.append(e.target.result);
	var md5 = spark.end()
	console.log(md5)
	//此处this指向发生改变,需提前声明const _this = this
	_this.imgdata.md5 = md5; //此处是将文件的md5值放入imgdata中
	//上传图片,如手动上传可不在此处执行
	_this.upload('frontImg')
	}
},

打印lile:在这里插入图片描述在这里插入图片描述
此处需要注意的是fileReader.onload为异步执行函数,如果上传设置的是自动上传的话需要在.vue文件的<el-upload>中设置禁用自动上传,然后在fileReader.onload函数中执行异步操作后调用自定义上传函数upload,在外部调用的话imgdata属性中无md5值。手动点击上传就无需考虑了。

upload函数 obj为<el-upload>插件中绑定的ref属性

//文件上传触发函数
upload:function(obj){
    this.$refs[obj].submit();
},

附加说明

网上有些方法基本思路与上述方法一致,但需要注意的是有些在获取文件二进制数据时用的是fileReader.readAsBinaryString

onFrontImgChange:function(file, fileList){
	const _this = this  //this指向问题
	var fileReader = new FileReader();
	var dataFile = file.raw;
	//console.log(file)
	let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
	var spark = new SparkMD5;
	fileReader.readAsBinaryString(dataFile)

	//异步执行函数
	fileReader.onload = function(e){
	spark.appendBinary(e.target.result);
	var md5 = spark.end()
	//console.log(md5)
	_this.imgdata.md5 = md5;
	_this.upload('frontImg')
	}
},

此方法也可获取文件的md5值,但是fileReader.readAsBinaryString方法在17年就已废除,在IE上或报错对象不支持“fileReader.readAsBinaryString”属性或方法。所以如果要考虑IE兼容的话尽量使用readAsArrayBuffer

同时请注意两种方法的不同部分代码需要修改,比较上述代码便知。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
使用vueelement-ui制作上传文件的效果时,可以按照以下步骤进行: 1. 安装element-ui:在终端中使用npm或yarn进行安装,例如:npm install element-ui --save。 2. 在vue组件中引入element-ui上传组件:在需要使用上传功能的组件中,使用import引入element-ui上传组件,例如: ``` <template> <div> <el-upload action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview" :on-remove="handleRemove" :before-upload="beforeUpload" :file-list="fileList" multiple list-type="picture" :auto-upload="false" :on-success="handleUploadSuccess" :on-error="handleUploadError"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </div> </template> <script> import { Upload, Button } from 'element-ui'; export default { components: { 'el-upload': Upload, 'el-button': Button }, data() { return { fileList: [] }; }, methods: { handlePreview(file) { console.log('preview', file); }, handleRemove(file) { console.log('remove', file); }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500k = file.size / 1024 < 500; if (!isJPG) { this.$message.error('只能上传jpg/png文件'); } if (!isLt500k) { this.$message.error('文件大小不能超过500kb'); } return isJPG && isLt500k; }, handleUploadSuccess(response, file, fileList) { console.log('success', response, file, fileList); }, handleUploadError(error, file, fileList) { console.log('error', error, file, fileList); } } }; </script> ``` 3. 配置上传组件的属性和方法:在引入上传组件后,需要根据实际需求进行配置,例如:设置上传的地址、文件大小限制、文件类型限制、上传前的校验、上传成功和失败的回调函数等。 4. 在模板中使用上传组件:在组件的模板中使用上传组件,并将需要上传文件绑定到fileList属性上,例如:`:file-list="fileList"`。 5. 样式美化:根据实际需求对上传组件的样式进行美化,例如:设置上传按钮的颜色、设置文件列表的样式等。 通过以上步骤,就可以在vue项目中使用element-ui制作上传文件的效果了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哔咔哔咔~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值