react项目上传图片踩坑总结

2,130 阅读2分钟

本项目用的第三方UI库是antdesign,所以在实现上传照片功能时利用了upload上传组件。

upload上传组件提供了两种方法上传服务器。第一种是使用默认的上传方法;第二种是使用customRequest通过覆盖默认的上传行为,可以自定义自己的上传实现。详情可参考:blog.csdn.net/lily_miao/a…

文章中第二种方法是利用ajax方法上传的。那如果利用axios方法该如何上传呢?经过踩坑,总结如下:

1、上传至服务器时需要带多个参数,需利用FormData的append方法将其他参数添加进去。上传时仅传formData数据即可。

customRequest = (option) => {
 const {appKey, categoryId } = this.requestPictureupload       
 //以formData表单对象上传    
let formData = new FormData();   
 formData.append("file", option.file);  
  formData.append("appKey", appKey);   
 formData.append("categoryId", categoryId);
//uploadPicture为axios封装的方法,形参只有data数据
    uploadPicture(formData).then(ref => {     
 if (ref.data.errorMsg == "上传成功") {       
 // console.log(ref.data.data)       
}
})
}

//请求拦截器部分配置
axios.interceptors.request.use(config => {    
let csrfToken = localStorage.getItem("token");   
   config.headers["token"] = csrfToken;   
    if(config.url=="api/v1/picture/upload"){
//以formData上传时请求头Content-Type类型要改为multipart/form-data,所以加了判断
        config.headers['Content-Type']="multipart/form-data";   
    }else{       
 config.headers['Content-Type'] = 'application/json';    
   }     
   return config;   

export const uploadPicture=(formData)=>{ 
//url暂时使用了前端代理跨域  
 return Http.post("api/v1/picture/upload",formData);}

(1)查看FormData()的打印数据。链接:www.cnblogs.com/gxp69/p/121…

(2)上传时network中的数据。

(3)axios请求参数设置。链接:www.kancloud.cn/yunye/axios…

(4)Content-Type的含义。链接:www.cnblogs.com/tugenhua070…

(5)js上传给后端服务器的两种方式。一种是以FormData表单形式上传(即键值对的形式),第二种是以base64数据格式上传。应提前跟后端确认好上传方式。

参考链接1:blog.csdn.net/qq_34664239…

参考链接2:juejin.cn/post/684490…

这篇文章也是customRequest方法上传的,挺不错。链接:github.com/react-compo…

未完,待续。。。

(1)上传一张照片和多张照片纸后端,前台显示每张上传状态;

(2)上传照片尺寸设置;