服务类别:
sendFiles(files: File[]): Observable<any> {
const formData = new FormData();
for (var i = 0; i < files.length; i++) {
formData.append("file", files[i]);
}
return this.httpClient.post(this.url, formData);
}
Component类:
uploadFile() {
this.service.sendFiles(this.files).subscribe(
response => {
this.files= response;
console.log("Files: " + JSON.stringify(this.files));
});
}
以上订阅仅适用于一个文件。
如何进行POST并订阅每个文件?
答案 0 :(得分:0)
我不确定我是否理解问题,但是无论如何我都会尝试答案。
您订阅的可观察对象映射到单个请求。如果您使用数据发出一个POST请求,您将收到一个响应。由您的后端决定要发回什么响应。如果响应仅包含一个文件,则您的后端可能未返回您期望的结果。
如果您不在乎发出多个请求,可以尝试执行forkJoin或合并。
sendFile(file: File) {
const formData = new FormData();
formData.append("file", file);
return this.httpClient.post(this.url, formData)
.map(response => JSON.stringify(response));
}
const requests = this.files.map(file => this.service.sendFile(file));
forkJoin(requests).subscribe(responses => {
// An array of responses.
});
merge(...requests).subscribe(file => {
// A single response.
});
forkJoin将分别发送每个请求,等待每个响应返回,然后发出每个响应的数组。
合并将单独发送每个请求,并在接收到请求时发出响应。
我不认为您需要多次致电订阅,但是请告诉我我是否错了。