vue项目下自己封装上传文件功能
axios因为统一封装过,通过这个库上传文件也行,但是封装的地方修改不太容易,遂另起炉灶。
看代码:
// utils/uploadFile.js
const baseUrlConfig = {
'development': 'http://localhost:8089/v1',
'production': 'http://47.96.112.186/v1'
}
const env = process.env.NODE_ENV
//单个上传文件,接受一个获取到的文件参数
function upload(path, file) {
return new Promise((resolve, reject) => {
if (!file) {
return alert("你还未选择文件");
}
var formData = new FormData();
// 接口只接受一个文件,取第一个文件即可
formData.append("image", file);
// 我们的接口需要这2个参数
formData.append("siteId", 1);
formData.append("session", localStorage.getItem("sessionId"));
// 1. 创建 xhr 对象
var xhr = new XMLHttpRequest();
// 5. 监听事件
xhr.onreadystatechange = function () {
console.log(234);
if (xhr.readyState === 4 && xhr.status === 200) {
var result = JSON.parse(xhr.responseText);
console.log(result);
if (result.status == 0) {
// 上传成功:显示图片
resolve(result.data)
} else {
// 上传失败
reject(result.reason)
}
}
};
// 2. 调用 open 函数
xhr.open("POST", baseUrlConfig[env] + path);
// 4. 调用 send 函数
xhr.send(formData);
})
}
export default upload;
<template>
<a-card>
<a-space class="operator">每天上传的图片不要超过5张</a-space>
<div class="box">
<!-- 1. 文件选择框 -->
<input type="file" id="file" />
<!-- 2. 上传文件的按钮 -->
<button id="btnUpload" @click="btnUpload">上传文件</button>
<div class="img-box" v-if="imgUrl">
<p>图片地址:{{ imgUrl }}</p>
<!-- 3. img 标签,来显示上传成功以后的图片 -->
<img :src="imgUrl" alt="等待上传图片" id="img" width="800" />
</div>
</div>
</a-card>
</template>
<script>
import dateFormat from "@/utils/dateFormat.js";
import upload from "@/utils/uploadFile.js";
export default {
data() {
return {
imgUrl: "",
};
},
filters: {
dateFormat(value) {
return dateFormat(value, "yyyy-MM-dd hh:mm:ss");
},
},
created() {},
activated() {},
mounted() {},
methods: {
btnUpload() {
let file = document.querySelector("#file").files[0];
upload("/admin/uploadFile", file).then((res) => {
this.imgUrl = res;
});
},
},
};
</script>
<style lang="less" scoped>
.box {
height: 500px;
padding: 20px 0 0;
.img-box {
margin-top: 30px;
text-align: center;
img {
width: auto;
height: 400px;
}
}
}
</style>

浙公网安备 33010602011771号