0

我可以发出从 Postman 上传文件的请求,但是当我从 Angular 发出请求时,它会返回 WARN“所需的 MultipartFile 参数‘文件’不存在”

它遵循我在 API 中的资源。

@PostMapping
public ResponseEntity<Conteudo> publicaConteudo(@RequestParam("file") MultipartFile file) throws JsonParseException, JsonMappingException, IOException {
    /* ANYTHING */
    return ResponseEntity.ok(new Conteudo());
}

还有我在 Angular 中的服务。我正在使用 JWT,但我也尝试使用 HttpClient 执行请求。

upload(file: File, conteudo: Conteudo): Promise<any> {
   let formData: FormData = new FormData();

   formData.append('file', file, file.name);

  /* USING JWT
   return this.http.post(this.conteudoUrl, formData)
    .toPromise()
    .then(response => response.json());
  */
     let h1 = new HttpHeaders().set('Authorization', 'Bearer ' + localStorage.getItem('token'));
     const req = new HttpRequest('POST',this.conteudoUrl, formData, {
         headers: h1
  });
  return this.httpClient.request(req).toPromise();
 }

以及我在 Postman 中的表现

在此处输入图像描述

我尝试了许多我发现的解决方案,例如创建 Bean MultipartResolver 和其他解决方案,但是任何解决我的问题的方法都可以解决,我认为更有趣的是它在 Postman 中运行良好。

4

1 回答 1

0

在你的 AbstractAnnotationConfigDispatcherServletInitializer 类中你有这个方法吗?:

@Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter("UTF-8");
        encodingFilter.setForceEncoding(true);
        return new Filter[]{new DelegatingFilterProxy("springSecurityFilterChain"), 
            new OpenEntityManagerInViewFilter(),encodingFilter, new MultipartFilter()};
    }

也许您还没有注册多部分过滤器。希望这有帮助。

于 2018-03-20T20:51:26.830 回答