hlllmm 2019-12-30 09:32 采纳率: 0%
浏览 1076
已采纳

vue ajax上传文件时Java后端报错

我正在做一个上传头像功能,前端使用vue.js,后端是springboot构建的项目,但是每次vue请求传到后端时,都会报格式错误。代码如下:

后端接口:
@PostMapping("/userinfo/uploadHeadImg")
public AjaxResult<?> uploadHeadImg(@RequestParam MultipartFile file, @RequestParam Integer userInfoId) throws Exception{
    return tbUserinfoService.uploadHeadImg(file,userInfoId);
}

html部分:

<div class="setting-head">
  <!--个人头像-->
  <div class="user-head-img" >
    <div class="use-click" @click="uploadHeadImg">
      <el-avatar :size="60" :src="userHeadImg" >
      </el-avatar>
       <input type="file" accept="image/*"  class="hiddenInput" @change="handleFile"/>
    </div>
  </div>
</div>

js部分:

    handleFile: function (e) {
      let $target = e.target || e.srcElement;
      let file = $target.files[0];
      var reader = new FileReader();
      reader.onload = (data) => {
        let res = data.target || data.srcElement;
        this.$store.dispatch("uploadHeadImg",file);
      };
      reader.readAsDataURL(file)
    },

store.js 文件部分:


  actions:{
    uploadHeadImg({commit,state},file){

      Vue.http.post('/userinfo/uploadHeadImg',{file:file,userInfoId:state.userInfoId},
        {headers: { 'Content-Type': 'multipart/form-data' }},
        ).then(function(res){
          var result = res.data;
          if(result.code=="200"){
            this.userHeadImg = res.result;
            commit("setUserHeadImgFile",file);
          }
      })
    }


报错现象分两种情况:

当store.js部分添加了

    {headers: { 'Content-Type': 'multipart/form-data' }},

后,后端报错如下:
Resolved [org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found]

我在网上找了大部分的解决方式是说去掉 header请求中的 Content-Type就行了。



但是当我去掉这部分后报错又变成了:
Resolved [org.springframework.web.multipart.MultipartException: Current request is not a multipart request]

网上搜索解决方式:说请求头添加


'Content-Type': 'multipart/form-data'

陷入死循环中....

希望有熟悉这部分的老哥可以帮忙请求看看,谢谢!!!

通过postman测试,后端接口成功,但就是通过vue访问就会报错

  • 写回答

1条回答 默认 最新

  • 珍妮玛•黛金 博客专家认证 2019-12-30 10:22
    关注

    把file放在FormData对象中来传到后台,

    你如果去掉了Content-Type': 'multipart/form-data',那么默认就是application/x-www-form-urlencoded这个
    所以你第二个错Current request is not a multipart request这个就是说不是一个multipart请求

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法