[英]Upload File as multipart/form-data from Angular with ngx-mat-file-input
我正在使用ngx-mat-file-input
[0]从用户检索文件输入,我想将其上传到服务器。 端点需要一个多部分文件。 我怎样才能做到这一点?
如果您以反应形式使用<ngx-mat-file-input>
,它将为您提供带有“文件”数组的对象。 该数组的元素的类型为“文件”。 文件扩展了Blob接口[0] [1]。 Blob是您需要发送到服务器的内容。
第一步:您必须将表单的结果包装在FormData
-Object [2]中。
<!-- Minimal form -->
<form *ngIf="fileForm" [formGroup]="fileForm">
<ngx-mat-file-input formControlName="file"></ngx-mat-file-input>
</form>
// the handler, e.g. if user presses "upload"-button
const file_form: FileInput = this.fileForm.get('file').value;
const file = file_form.files[0]; // in case user didn't selected multiple files
const formData = new FormData();
formData.append('file', file); // attach blob to formdata / preparing the request
注意 :您可能希望.append
将返回一个新对象,如HttpHeaders#append
但此处并非如此。 FormData#append
返回void
。 因此,您不能const formData = new FormData().append('file', file);
!
第二步:现在将FormData
-Object传递给HttpClient#post
。
this.http.post<void>('/upload', formData).subscribe(() => {
// worked
}, err => {
console.error(err);
});
注意 :服务器希望在请求参数“ file”中包含该文件,因为我们在FormData
-Object中设置了该名称。
而已。
接受此文件的控制器可能看起来像这样(在此示例中:Java / Spring),但这是所有可以接受多形式请求的服务器的通用解决方案。
@PostMapping("/upload")
public void upload(@RequestParam("file") MultipartFile file) {}
[0] https://developer.mozilla.org/de/docs/Web/API/File
[1]打字稿类型信息(通过您的IDE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.