如何在Angular 2中订阅FormData对象的数组?

时间:2018-08-27 20:48:12

标签: angular

服务类别:

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并订阅每个文件?

1 个答案:

答案 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将分别发送每个请求,等待每个响应返回,然后发出每个响应的数组。

合并将单独发送每个请求,并在接收到请求时发出响应。

我不认为您需要多次致电订阅,但是请告诉我我是否错了。