从给定文件的内容来看,本文主要讲解了如何使用Element UI的Upload组件实现多图片上传以及图片上传前的压缩处理,并且文章中提到在项目中运用了Vuex进行状态管理,以及七牛云作为图片存储的解决方案。
文章中提到了多图片上传的整个流程,这个流程可以概括为以下几个步骤:
1. 前端向后端请求上传图片所需的token,这一步是为了确保图片上传的安全性。
2. 后端接收到请求后,为每张图片生成一个唯一的图片名,并根据这个图片名生成对应的token,通常这个过程还会涉及到图片的预处理,比如图片的大小和格式检查等。
3. 后端将生成的图片名和token返回给前端,前端接收到这些信息后,就可以开始图片的上传过程。
4. 前端使用接收到的token将图片上传至服务器,上传过程结束。
5. 前端在图片上传成功后,将图片名发送给后端,后端接收到图片名后将图片名存入数据库中,以备后续的检索和管理。
接着,文章中通过一个具体的Vue组件实例展示如何利用Element UI的Upload组件实现上述功能。这个组件部分的代码如下:
```vue
<el-upload
:action="domain"
ref="upload"
accept="image/jpeg,image/gif,image/png"
:auto-upload="false"
:http-request="upqiniu"
:limit="limit"
:multiple="multiple"
list-type="picture-card"
:before-upload="beforeUpload"
:on-preview="handlePictureCardPreview"
:on-change="handldChange"
:on-remove="handleRemove">
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
```
在这段代码中,通过`el-upload`标签创建了一个上传组件,并通过各种属性对上传组件的行为进行了配置。例如,`:action`属性指定了上传的服务器地址,`:before-upload`属性定义了图片上传前要执行的方法,`:http-request`属性则覆盖了默认的上传行为,允许我们自定义上传逻辑。此外,`list-type`属性设置为`picture-card`,这会让上传的图片以卡片形式展示。
在上传图片前,需要对图片进行压缩,以减少上传的数据量并提高上传速度。文章中提供了压缩图片的一个实现方法,即通过`beforeUpload`方法来实现。`beforeUpload`方法里返回了一个Promise对象,在这个Promise中实现图片的压缩逻辑:
```javascript
beforeUpload(param){
// 对图片进行压缩
const imgSize = param.size / 1024 / 1024;
if (imgSize > 1) {
// 当图片超过1MB时,进行压缩处理
return new Promise(resolve => {
const reader = new FileReader();
const image = new Image();
image.onload = (imageEvent) => {
const canvas = document.createElement('canvas');
const width = image.width * this.imgQuality;
const height = image.height * this.imgQuality;
canvas.width = width;
canvas.height = height;
const context = canvas.getContext('2d');
context.clearRect(0, 0, width, height);
context.drawImage(image, 0, 0, width, height);
const dataUrl = canvas.toDataURL(param.type);
const blobData = this.dataURItoBlob(dataUrl, param.type);
resolve(blobData);
};
reader.onload = (e => { image.src = e.target.result; });
reader.readAsDataURL(param);
});
}
},
```
在这段代码中,`beforeUpload`方法会检查图片的大小,如果图片的大小超过1MB,则会使用canvas API对图片进行缩放,以降低图片的质量,从而实现压缩。
此外,文章还提到了使用Vuex来管理组件状态,以及利用七牛云作为图片存储服务。在实际的Web应用开发中,状态管理库(如Vuex)能帮助开发者更好地管理和维护应用的状态。而云存储服务(如七牛云)则提供了一种便捷的方式来存储和分发图片等静态资源。
在文章提供了一个项目地址,这个地址可能是指向一个在线的代码仓库或者是一个项目演示的网址,让读者可以更直观地看到代码的运行效果和功能实现。
整体来看,本文详细介绍了在Web开发中如何使用Element UI的 Upload 组件来实现多图片上传功能,并在上传之前加入了图片压缩的步骤。同时通过一个Vue组件示例,向读者展示了在前端如何组织和实现这一功能。通过这些知识点,开发者可以学习到在实际项目中如何优雅地处理图片上传的问题,并了解如何通过第三方库和云服务来提升应用的功能性和用户体验。