Vue实现文件上传(单文件、多文件、分片上传)
前端使用UI封装好的upload组件
1.单文件上传
<a-upload
:disabled="!editpersonflag"
name="avatar"
listType="picture-card"
class="avatar-uploader"
:showUploadList="false"
:beforeUpload="beforeUpload"
@change="handleAvatar"
>
<img v-if="imageUrl" :src="imageUrl" alt="avatar" style="width:204px;height:164px">
</a-upload>
// 处理文件上传
handleUpload(file) {
axios({
url: "http://127.0.0.1:9898/filemodule/file/upload",
method: "post",
headers: {
"Content-Type": "multipart/form-data",
token:
localStorage.getItem("token") === null
? ""
: localStorage.getItem("token")
},
data: {
file: file
},
transformRequest: [
function(oldData) {
var form = new FormData();
for (let item in oldData) {
form.append(item, oldData[item]);
}
return form;
}
]
}).then(response => {
if (response.data.code === 200) {
this.$message.success("上传成功");
this.imageUrl = response.data.data.url;
} else {
this.$message.error("上传失败");
}
});
},
beforeUpload() {
return false;
},
2.多文件上传
<!-- 预览图 -->
<b-row class="evaluate-row">
<span class="evaluate-span">预览图</span>
<a-upload multiple :fileList="fileList" :remove="handleRemove" :beforeUpload="beforeUpload">
<a-button>
<a-icon type="upload"/>选择文件
</a-button>
</a-upload>
<a-button
type="primary"
@click="handlePreviewAvatar"
:disabled="fileList.length === 0"
:loading="uploading"
style="margin-left: 16px"
>{{uploading ? '上传中' : '开始上传' }}</a-button>
</b-row>
handleRemove(file) {
const index = this.fileList.indexOf(file);
const newFileList = this.fileList.slice();
newFileList.splice(index, 1);
this.fileList = newFileList;
},
beforeUpload1(file) {
this.fileList = [...this.fileList, file];
return false;
},
// 预览图
handlePreviewAvatar() {
const previewurls = [];
for (var i = 0; i < this.fileList.length; i++) {
axios({
url: "http://127.0.0.1:9898/filemodule/file/upload",
method: "post",
headers: {
"Content-Type": "multipart/form-data",
token:
localStorage.getItem("token") === null
? ""
: localStorage.getItem("token")
},
data: {
file: this.fileList[i]
},
transformRequest: [
function(oldData) {
var form = new FormData();
for (let item in oldData) {
form.append(item, oldData[item]);
}
return form;
}
]
}).then(response => {
if (response.data.code === 200) {
this