我正在尝试为角度为6的excel文件创建一个上传表单。我实现了一个文件选择器,我想通过该文件选择器将excel文件上传(发布)到某个期望“ MULTIPART_FORM_DATA”的端点。现在我已经读到,您不应该在5以上的角版本的标题中设置内容类型,但是如果我在标题中不包含content-type,则角度应用程序会自动将其设置为 服务器不希望使用“ application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”,因此会导致“错误请求”。那么,如何为角度为6的multipart / form-data实现有效的“ post”?
端点看起来像这样:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadExcel(
@FormDataParam("file") InputStream inputStream,
@FormDataParam("file") FormDataContentDisposition contentDispositionHeader){...}
角度分量看起来像这样:
handleFileInput(event: any): void {
if (!event.target.files.length) {
return;
}
this.fileToUpload = event.target.files.item(0);}
private uploadFile(): void {
this.fileService.uploadFile(this.fileToUpload).subscribe(
(res: any) => {
console.log('upload succeeded');
}
);}
html表单看起来像这样:
<form (submit)="uploadFile()" enctype="multipart/form-data">
<label for="file">choose excel file to upload: </label>
<input type="file" name="file" id="file" accept=".xls,.xlsx" (change)="handleFileInput($event)">
<input type="submit" name="submit" class="submitButton">
服务看起来像这样:
uploadFile(file: File): Observable<any> {
const fd: FormData = new FormData();
fd.append('file', file, file.name);
return this.http.post(this.fileURL, file);
}
答案 0 :(得分:0)
我发现了自己犯的错误:我将错误的参数传递给http.post调用。 服务当然应该是这样的:
uploadFile(file: File): Observable<any> {
const fd: FormData = new FormData();
fd.append('file', file, file.name);
return this.http.post(this.fileURL, fd);
}