1.开发环境 vue
2.电脑系统 windows10专业版
3.在开发的过程中,我们经常会使用到element进行文件的上传和二进制文件的解析,下面我来分享一下。
4.element图片上传,代码如下:
// template中代码如下:
<el-upload list-type="picture-card"
action=""
:limit="1"
:auto-upload="false" //关键 代码
:on-change="onchangeMainpicture" //文件上传时触发函数
>
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<img class="el-upload-list__item-thumbnail" :src="file.url" alt="" /> <span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click="handlePictureCardPreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleDownload(file)">
<i class="el-icon-download"></i>
</span>
<span v-if="!disabled" class="el-upload-list__item-delete" @click="handleRemove(file)">
<i class="el-icon-delete"></i>
</span>
</span>
</div>
</el-upload>
return 中代码如下:
uploadimgurl: {
// 主图
Mainpictureurl: "",
// 主题内容
Mainimagecontenturl: "",
// 视频
videourl: "",
},
// methods中添加如下代码
onchangeMainpicture(file, fileList) {
console.log(file);
this.uploadimgurl.Mainpictureurl = file.raw;
},
5.视频上传
// template代码
<el-upload list-type="picture-card"
:on-change="onchangevideo"
action=""
:limit="1"
:auto-upload="false">
<i slot="default" class="el-icon-plus"></i>
<div slot="file" slot-scope="{ file }">
<video :src="file.url" class="avatar" controls="controls">
</video>
</div>
</el-upload>
// return 代码如上
// methods方法 如下:
onchangevideo(file, fileList) {
// console.log(event);
// console.log(file);
// console.log(fileList);
this.uploadimgurl.videourl = file.raw;
},
6.提交代码
async uploadpictures() {
let formData = new FormData();
const param = {
itemMainId: this.$route.query.mainId,
};
formData.append("param", JSON.stringify(param));
formData.append("main", this.uploadimgurl.Mainpictureurl); //主图
formData.append("images", this.uploadimgurl.Mainimagecontenturl); //主图内容
formData.append("images", this.uploadimgurl.Mainimagecontenturl); //主图内容
formData.append("images", this.uploadimgurl.Mainimagecontenturl); //主图内容
formData.append("images", this.uploadimgurl.Mainimagecontenturl); //主图内容
formData.append("video", this.uploadimgurl.videourl); //视频
await baduploadpictureupload(formData).then((res) => {
console.log("我是上传主图的接口");
console.log(res);
});
},
7.解析二进制图片/视频,封装方法如下:
// 封装全局方法,存储文件 id
/*
头像(0), 身份证正面(1),身份证反面(2),门店(10), 营业执照(11),
商品主档图(20), 商品主档视频(21), 商品主档内容(22),
商品图(30),图纸2D(31),图纸3D(32);
*/
function getfilesid(value1) {
let filesidobj = {
id0: "",// 头像
id1: "",//身份证正面
id2: "",//身份证反面
id10: "",//门店
id11: "",//营业执照
id20: "",//商品主档图
id21: "",//商品主档视频
id22: "",//商品主档内容
id30: "",//商品图
id31: "",//图纸2D
id32: "",//图纸3D
}
for (let key in value1) {
console.log(key);
console.log(value1[key]);
switch (value1[key]) {
case "0":
filesidobj.id0 = key;
break;
case "1":
filesidobj.id1 = key;
break;
case "2":
filesidobj.id2 = key;
break;
case "10":
filesidobj.id10 = key;
break;
case "11":
filesidobj.id11 = key;
break;
case "20":
filesidobj.id20 = key;
break;
case "21":
filesidobj.id21 = key;
break;
case "22":
filesidobj.id22 = key;
break;
case "30":
filesidobj.id30 = key;
break;
case "31":
filesidobj.id31 = key;
break;
case "32":
filesidobj.id32 = key;
break;
default:
break;
}
}
return filesidobj;
}
// 封装全局 图片请求接口
// 导入 图片 接口
import {
badlisttabledetailsfiles, //获取图片接口
badlisttabledetailsvideofiles, // 获取视频接口
} from "@/network/api";
// 公用 图片 请求 接口
async function getfilesimg(id) {
let getfilesimgres = [];
await badlisttabledetailsfiles({
fileId: id,
}).then((res) => {
console.log("我是公用获取图片接口");
console.log(res);
let reader = new FileReader();
reader.readAsDataURL(res);
getfilesimgres.push(window.URL.createObjectURL(res));
return getfilesimgres;
});
return getfilesimgres;
}
// 公用 视频 请求 接口
async function getfilesvideo(id) {
let getfilesvideores = {}
await badlisttabledetailsvideofiles({
fileId: id,
}).then((res) => {
console.log("我是公用获取视频接口");
console.log(res);
// let reader = new FileReader();
// reader.readAsDataURL(res);
// console.log(res);
// this.filesvideo = window.URL.createObjectURL(res);
// console.log(this.filesvideo);
getfilesvideores = window.URL.createObjectURL(
new Blob([res], {
type: "application/octet-stream"
})
);
return getfilesvideores;
console.log(getfilesvideores);
});
return getfilesvideores;
}
7-1.请求接口封装
// 图片 接口
export const badlisttabledetailsfiles = (value) => {
return http1({
url: "/api/sys/image",
method: "post",
data: value,
responseType: 'blob',
});
};
// 视频 接口
export const badlisttabledetailsvideofiles = (value) => {
return http1({
url: "/api/sys/file",
method: "post",
data: value,
responseType: 'arraybuffer',
});
};
8.封装方法使用如下:
// 获取文件 id
let filesid = this.$Cmethods.getfilesid(this.filesimg);
// 获取 对应id下面图片的地址
let getfilesimg = await this.$Cmethods.getfilesimg(filesid.id20); //获取主档
// 获取对应 id下面的视频地址
let filesvideo = await this.$Cmethods.getfilesvideo(filesid.id21); //宝贝视频
9.本期的分享到了这里就结束拉,希望对你有所帮助,让我们一起努力走向巅峰。