利用el-upload进行文件或者图片的上传

<div class="upload">
	<el-upload 
     action="stuEcommerceDataReport/uploadAnalysisData" 
    :data="{ type: 1 }" 		
    :headers="headerParam"
    :on-success="handleCoverSuccessAnswer"
    :on-error="imageError"
    :before-upload="beforeCoverUpload"
    :show-file-list="false">
		<el-button type="primary" size="medium" plain class="upload-btn">点击上传</el-button>
	</el-upload>
  <p class="fileInfo" v-show="analysis_data.sale_trend_analysis_file.name">
   已选择:<span class="filename">{{analysis_data.sale_trend_analysis_file.name}}</span>
   		<i class="el-icon-close" @click="deleteFile(1)"></i>
  </p>
</div>
/
headerParam: {
        Authorization: localStorage.getItem("studentToken") || "",
      },

.action=“stuEcommerceDataReport/uploadAnalysisData"文件的上传调用的接口
:data=”{ type: 1 }" 接口需要的参数
:headers=“headerParam” 请求头,发送axios请求是需要设置的请求头,一般需要携带token
:on-success=“handleCoverSuccessAnswer1"文件上传是调用的函数,接受特定的参数,第一个参数是文件返回的结果,即res
:on-error=“imageError” 文件上传失败调用的函数,也是接受特定的参数
:before-upload=“beforeCoverUpload” 文件上传之前调用的函数,可以在这里来限制文件上传的大小
:show-file-list=“false"是否显示文件上传的列表,true为显示
accept=”.jpg, .jpeg, .png” 限制文件上传的类型

 beforeCoverUpload(file) {
            const is2M = file.size / 1024 / 1024 < 10;
            if (!is2M) {
                this.$message.warning('图片尺寸限制为800px x 800px,大小不可超过2MB');
                return false;
            } else {
            //限制图片的尺寸
                const isSize = new Promise((resolve, reject) => {
                    const width = 800;
                    const height = 800;
                    const _URL = window.URL || window.webkitURL;
                    const img = new Image();
                    img.onload = () => {
                        const valid = img.width === width && img.height === height;
                        valid ? resolve() : reject();
                    };
                    img.src = _URL.createObjectURL(file);
                }).then(() => {
                    return file;
                }, () => {
                    this.$message.warning('图片尺寸限制为800px x 800px,大小不可超过2MB');
                    return Promise.reject();
                },
                );
                return isSize;
            }
        },
//或者这样判断也可以
 const maxSize = 10 * 1024 * 1024; // 10MB  1MB=1024*1024
            if (file.size>maxSize) {
                this.$message.warning('图片大小不可超过10MB');
                return false;
            } else
 // 上传图片
        handleCoverSuccess(res, file) {
            if (res.code === 200) {
                // this.headerSrc = this.hostUrl + res.data; // 有域名
                this.addOrderForm.file = res.data; //无域名
                this.$message.success('头像上传成功')
            } else {
                this.$message.error('头像上传失败,请稍后再试~')
            }
        },

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

可以使用以下代码实现利用cryptojs分块计算文件sha256并上传文件: ```javascript <el-upload action="url/to/upload" :before-upload="beforeUpload" > <el-button type="primary">上传文件</el-button> </el-upload> <script> import CryptoJS from 'crypto-js' export default { methods: { async beforeUpload(file) { const chunkSize = 1024 * 1024 // 分块大小为1MB const chunks = Math.ceil(file.size / chunkSize) // 计算总共分多少块 const sha256Array = [] // 用于存储每个分块的sha256值 for (let i = 0; i < chunks; i++) { const start = i * chunkSize const end = i === chunks - 1 ? file.size : start + chunkSize const chunk = file.slice(start, end) // 分块 const sha256Value = await this.calculateSha256(chunk) // 计算分块的sha256值 sha256Array.push(sha256Value.toString()) // 存储sha256值 } // 将所有分块的sha256值组成一个字符串并计算其sha256值 const fileSha256 = CryptoJS.SHA256(sha256Array.join('')).toString() // 将文件和sha256值作为FormData提交给后端 const formData = new FormData() formData.append('file', file) formData.append('sha256', fileSha256) return { data: formData } }, calculateSha256(chunk) { return new Promise((resolve, reject) => { const reader = new FileReader() reader.readAsArrayBuffer(chunk) reader.onload = () => { const wordArray = CryptoJS.lib.WordArray.create(reader.result) const sha256Value = CryptoJS.SHA256(wordArray) resolve(sha256Value) } reader.onerror = reject }) } } } </script> ``` 在这个例子中,我们使用了`async/await`语法来等待每个分块的sha256值计算完毕后再继续下一个分块的计算。注意到`beforeUpload`方法需要返回一个对象,其中`data`属性为一个`FormData`对象,这个对象中包含了文件和计算出来的sha256值。这样,在上传文件时,后端就可以利用这个sha256值来验证文件是否完整且未被篡改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值