【问题标题】:Unsupported Media Type: upload files不支持的媒体类型:上传文件
【发布时间】:2018-06-18 12:47:38
【问题描述】:

我的文档-upload.service.ts

private uploadFile(file: File) {
        let formData: FormData = new FormData();
        formData.append('uploadFile', file, file.name);
        let headers = new HttpHeaders({'Content-Type': 'multipart/form-data'});
        return this.http.post(`${this.uploadUrl}`, formData, {headers: headers, responseType: 'text' });
    }

我的 RestResourceFileUpload.java

    @Path("/fileupload")
public class RestResourceFileUpload
{
    @Inject
    private FileUploadDomainService fileUploadDomainService;

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response fileUpload(
            @FormDataParam("file") InputStream uploadedInputStream,
            @FormDataParam("file") FormDataContentDisposition formContent) throws SGDevException, IOException
    {}

当我打电话给我的休息服务时,我得到了

[警告] javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type

:( 知道为什么它不起作用吗?

【问题讨论】:

  • 这是因为我使用@FormDataParam("file") FormDataContentDisposition formContent,没有这个参数,一切都可以,但我需要FormDataContentDisposition:/

标签: angular file-upload jax-rs


【解决方案1】:

我能找到的关于多部分的所有示例,其中将 Content-Type 设置为未定义的角度,你为什么要提供?(从 https://github.com/hapijs/discuss/issues/460 上的 Marsup 复制) 我遇到了这两个问题:
“无效的多部分有效负载格式”和
“不支持的媒体类型”。
首先通过使用 Content-Type 来解决 undefined 和
其次,使用 FormData 并附加到它。
并且因为您使用 FromData,将 Content-Type 更改为 undefined 可能会有所帮助。
这就是我想到的想法:) 希望它也适合你!

【讨论】:

    【解决方案2】:

    将您的文件添加为 Blob,并且不要在 Http-Headers 中设置 Content-Type:

      const params = new HttpParams().set('value', value);
    const url = `${this.serviceResource}/runTest`;
    
    const fd = new FormData();
    fd.append('test', new Blob([JSON.stringify(test)], {
      type: "application/json"
    }));
    fd.append('placeholders', new Blob([JSON.stringify(placeholders)], {
      type: "application/json"
    }));
    
    return this.http.post<Test>(url, fd, {
      headers: new HttpHeaders({
        Authorization: token
        //   'Content-Type': undefined,  -> FormData generrates Content Type automatically
      }),
      params
    });
    

    弹簧部分:

    @PostMapping(value = "/runTest", consumes = "multipart/form-data")
    public Test runTest(
        @RequestParam("value") String value,
        @RequestPart("test") Test test,
        @RequestPart("placeholders") ArrayList< Placeholder> placeholders,
    

    这是自动生成的:

    并通过将其添加为 BLOB 文件获得自己的内容类型:

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 2021-05-26
      • 1970-01-01
      • 2019-10-07
      • 2018-10-29
      • 2015-07-21
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多