手动上传文件转Base64
<el-form-item label="上传文件">
<el-upload
class="upload-demo"
drag
action
multiple
:auto-upload="false"
:file-list="fileUpList"
:on-change="handleChange"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处,或<em>点击上传</em>
</div>
</el-upload>
</el-form-item>
setup(props, { root, refs, emit }) {
const data = reactive({
infoForm: {
base64Files: [],
},
// 上传文件参数
fileUpList: [], // 上传的文件列表
});
//上传多个
const handleChange = (file, fileList) => {
data.infoForm.base64Files = [];
if (!/\.(xlsx|xls|XLSX|XLS|pdf)$/.test(file.name)) {
root.$message({
type: "warning",
message: "上传文件只能为excel或者pdf文件!",
});
root.fileUpList = [];
return false;
}
//输出base64
getBase64(file.raw).then((res) => {
data.infoForm.base64Files.push({
fileName: file.name,
base64Str: res,
});
});
};
const getBase64 = (file) => {
return new Promise((resolve, reject) => {
///FileReader类就是专门⽤来读⽂件的
const reader = new FileReader();
//开始读⽂件
//readAsDataURL: dataurl它的本质就是图⽚的⼆进制数据,进⾏base64加密后形成的⼀个字符串,
reader.readAsDataURL(file);
// 成功和失败返回对应的信息,reader.result⼀个base64,可以直接使⽤
reader.onload = () => resolve(reader.result);
// 失败返回失败的信息
reader.onerror = (error) => reject(error);
});
};
}
return {
data,
getBase64,
handleChange,
};