vue3.0关于文件导入(上传)方法
在我们开发中,有时会用到文件上传或者文件导入,如图,我们需要在文本框中输入内容或者直接导入文件内容,此输入框由按钮和上传组件一块组成,实现方法如下:
1.该输入框和上传按钮组成部分代码:
<el-form-item label="上传文件 :" prop="regexRule">
<el-input
size="large"
v-model="form.regexRule"
placeholder="请输入内容或导入文件内容"
>
<template #append>
<el-upload
ref="uploadRef"
class="upload-demo"
multiple
v-model:file-list="fileList"
:on-change="fileChange"
:http-request="uploadFile"
accept=".txt"
:limit="2"
>
<template #trigger>
<el-button
@click="showchange"
plain
style="height: 42px;"
>
导入
</el-button>
</template>
</el-upload>
</template>
</el-input>
</el-form-item>
2.js代码组成部分:
const fileList = ref([]);
const uploadRef = ref();
//判断上传文件格式、第二次上传文件是否保留、文件大小
const fileChange = (uploadFile, fileList) => {
let imgSize = Number(uploadFile.size / 1024 / 1024);
const isXlS = 'text/plain';
if (![isXlS].includes(uploadFile.type)) {
ElMessage.info('上传的文件格式不正确,请选择.txt类型文件');
return false;
}
} else if (fileList.length > 1) {
ElMessageBox.confirm('文件已存在,是否确定替换文件?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(async () => {
fileList.slice(-1);
uploadRef.value.handleRemove(fileList[0]);
})
.catch(() => {
fileList.slice(0, 1);
uploadRef.value.handleRemove(uploadFile);
});
} else if (imgSize >= 2) {
ElMessageBox.confirm('文件大小不能超过2MB,请重新上传。', '警告', {
confirmButtonText: '确定',
type: 'warning',
})
.then(async () => {
fileList.slice(-1);
uploadRef.value.handleRemove(fileList[0]);
})
.catch(() => {
fileList.slice(0, 1);
uploadRef.value.handleRemove(uploadFile);
});
}
};
// 文件通过判断之后调接口
const uploadFile = async config => {
uploadRef.value.clearFiles(); //去掉文件列表
try {
const fd = new FormData();
fd.append('multipartFile', config.file);
const res = await appTemplate(fd);
if (res.code === 0) {
ElMessage.success('文件上传文件成功');
form.regexRule = res.data;
}
} catch (error) {
console.log(error);
}
};