我的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不支持的媒体类型
:( 知道为什么它不起作用吗?
答案 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,
这是自动生成的:
并通过将其添加为 BLOB 文件获得自己的内容类型: