zoukankan      html  css  js  c++  java
  • vue+axios+antD的上传图片踩坑

    axios以formData的形式进行图片上传,然而传递给后台的formData是空的,打印出来的form又确实是存在的。

    一开始想的是在请求头添加'Content-Type':'multipart/form-data',但是发现并没有用。

    翻阅了axios的文档,也没有找到相关问题的解释。于是开启了面向百度之路,说是axios的配置不纯净,并且要设置withCredentials:true。

    于是就在问题页面创建一个新的axios实例,具体步骤如下:

    1.引入axios    import axios from 'axios';

    2.创建一个新的axios,

    const instance = axios.create({
      withCredentials:true  //表示跨域请求时是否需要使用凭证,默认为false
    })

    instance.post('url',formData).then(res=>{
    })
    .catch(err=>{
    console.log(err)
    })

    这时可以看到formData出来了,有点小开心,于是马上试了下上传图片,但是后台还是没有收到图片,传递的image值如下

    然后跟后台的一番讨论才知道我传的是图片的base64编码,后台需要接收的是file文件对象,于是又百度一下,将base64转换成file形式.

    完整代码如下

                addPhoto(){
                  let self = this
                  const form = new FormData()
                  self.fileList.forEach((file) => {   // fileList 是要上传的文件数组
                      self.imageUrl = file.url || file.thumbUrl
                      form.append('image', self.dataURLtoFile(self.imageUrl,file.name))
                  });
                  form.append('seedbedId', self.seedbedId)
                  const instance = axios.create({
                      withCredentials:true
                  })
                  instance.post('url',form).then(res=>{
                      if(res.data.code===2000){
                          console.log(res.data.message)
                      }else{
                          console.log(res.data.message)
                      }
                  })
                  .catch(err=>{
                      console.log(err)
                  })
                },
                dataURLtoFile(dataurl, filename) {//将base64转换为文件
                    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
                    bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
                    while(n--){
                        u8arr[n] = bstr.charCodeAt(n);
                    }
                    return new File([u8arr], filename, {type:mime});
                },

    至此上传图片告一段落

  • 相关阅读:
    Android笔记:数据储存
    Android笔记:管理所有活动
    Android随笔:属性
    Android笔记:限定符
    Android笔记:ninepatch
    Android笔记:获取屏幕信息
    js自动完成
    动态生成实体类
    EF框架学习手记
    js遮罩效果
  • 原文地址:https://www.cnblogs.com/ruilin/p/11298936.html
Copyright © 2011-2022 走看看