不支持的媒体类型:上传文件

时间:2018-01-09 13:10:34

标签: angular file-upload jax-rs

我的document-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不支持的媒体类型

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

将您的文件添加为 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,

这是自动生成的:

enter image description here

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

enter image description here