小编给大家分享一下使用vue实现axios图片上传功能的示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
vue中实现图片上传,我这里使用的是FormData通过axios向后台发送请求,从而实现图片的上传。
在发起请求的axios中一般用qs进行序列化,但是序列化之后,FormData就传送失败,所以要区别传送的数据类型。
经过多次摸索总结了以下经验,以供参考。
首先创建一个文件夹services ,里面有两个文件 index.js 和 api.js。
我们的qs序列化和数据拦截写在index.js中
import axios from "axios";
import config from "@/config";
import router from "@/router";
import validate from "@/util/validate";
import Qs from "qs";
const request = axios.create({
baseURL: config.hostUrl,
timeout: 52000,
transformRequest: [
(data) => {
return data instanceof FormData ? data : Qs.stringify({ //此处的data类型判断为重要点,
...data
});
}
]
});
request.interceptors.request.use( //请求拦截
config => {
return config;
},
error => Promise.error(error)
);
request.interceptors.response.use(// 响应拦截器
async function (res) {
if (res.status === 200) {
return Promise.resolve(res.data);
} else {
return Promise.reject(res.data);
}
},
async function (error) {
const {
response
} = error;
if (response) {
return Promise.reject(response);
} else {
}
}
);
export default request;
写好上面的代码在api.js 请求接口就无须做任何操作了,下面示例:
async upImgs(files) { // 我的相册图片上传
return (await request.post('/basis/uploadFile', files)).response
},
页面调用接口
async file_up(event) {
//图片预览
try {
let res = null;
this.file = [...event.target.files];
for (let i = 0, f; (f = this.file[i]); i++) {
if (i >= 8 || this.imgs.length >= 8) {
return;
}
let fileImg = new FormData();
fileImg.append("file", f);
res = await this.$api.upImgs(fileImg); //这里是调用api处, 此处为多图上传,供参考
if (res.result) {
this.imgs.push(res.result.absoluteFilePath);
}
}
} catch (err) {
this.$toast({
message: err.message,
duration: 1200
});
}
}
以上是“使用vue实现axios图片上传功能的示例”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。