1

我想用spring boot和vue上传文件。但是,我有一个错误“415:不支持的媒体类型”。

这是我的弹簧启动控制器。

@PostMapping(consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseBody
@ApiOperation(value = "회원 가입&quot;, notes = "<strong>아이디와 패스워드</strong>를 통해 회원가입 한다.") 
@ApiResponses({
    @ApiResponse(code = 200, message = "성공"),
    @ApiResponse(code = 401, message = "인증 실패"),
    @ApiResponse(code = 404, message = "사용자 없음"),
    @ApiResponse(code = 500, message = "서버 오류")
})
public ResponseEntity<User> register(
        @RequestParam("file") MultipartFile file,) throws IllegalStateException, IOException, URISyntaxException {
    ...

}

而且,这是我的 vue 代码。

<el-form-item prop="profileImg" label="프로필 사진" :label-width="state.formLabelWidth" >
  <input @change="fileSelect()" id="profileimg" type="file" accept="image/*">
</el-form-item>

const formData = new FormData()
        formData.append('userId', state.form.userId)
        formData.append('userName', state.form.userName)
        formData.append('password', state.form.password)
        formData.append('age', state.form.age)
        formData.append('gender', state.form.gender)
        formData.append('phoneNum', state.form.phoneNum)
        formData.append('email', state.form.email)
        formData.append('mbti', state.form.mbti)
        formData.append('guide', state.form.guide)
        formData.append('file', state.form.profileImg)

profileImg ({ commit }, payload) {
  return axios
    .post(`${BASE_URL}/api/v1/users`, payload,
      { 
        headers: {
          "Accept": "*/*", 
          "Content-Type": "multipart/form-data"
        }
      }
    )
}

我试过@RequestPart MultipartFile file了,但有同样的错误。我该如何解决?

4

2 回答 2

0

对不起,我不能添加评论,这个答案只是我的猜测

如果你输出怎么办

request.getHeader(HttpHeaders.CONTENT_TYPE);

如果您的请求通过 Nginx 或其他代理传递,则 Content-Type 可能已更改

于 2021-08-12T04:52:27.123 回答
0

我在GitHub 上找到了答案 你所要做的就是改变

@RequestParam("file") MultipartFile file)

和 :

@RequestParam("file") FilePart file)
于 2021-09-07T14:29:21.483 回答