簡體   English   中英

Angular HttpClient發布兩個文件(Multipart / form-data)

[英]Angular HttpClient Post Two Files (Multipart/form-data)

我有一個Java Spring Boot控制器,它接受兩個MultipartFile請求參數。 我已經通過Swagger和Postman測試了此端點,並且可以正常工作。 請參閱下面的界面:

@RequestMapping(value = "/start/", method = RequestMethod.POST)
ResponseEntity<String> startSim(@RequestParam("scenario") MultipartFile scenarioFile, @RequestParam MultipartFile probabilityFile);

在Angular中,我添加了代碼來分別選擇/上傳文件,這些文件以名為configFile和parameterFile的私有變量的形式存儲在我的app.component.ts文件中,如下所示:

 uploadConfigFile(e) {
    const reader = new FileReader();
    const file = e.target.files[0];
    this.configFile = file;
    // reader.onload = () => {
    //   this.configFile = reader.result;
    // };
    // reader.readAsBinaryString(file);
  }

  uploadParameterFile(e) {
    const reader = new FileReader();
    const file = e.target.files[0];
    this.parameterFile = file;
    // reader.onload = () => {
    //   this.parameterFile = reader.result;
    // };
    // reader.readAsBinaryString(file);
  }

如何使用post方法發送兩個文件?

  startSim(e) {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'multipart/form-data'
      })
    };
    console.log(this.configFile);
    console.log(this.parameterFile);

    // const formData = new FormData();
    // formData.append('scenarioFile', this.configFile);
    // formData.append('probabilityFile', this.parameterFile);
    //
    // console.log(formData);

    const params = new HttpParams();
    params.append('scenarioFile', this.configFile);
    params.append('probabilityFile', this.parameterFile);

    const result = this.http.post(this.startURL, params, httpOptions);
    result.subscribe(json => console.log(json));
  }

我嘗試使用FormData和HttpParams發送請求。

更新資料

更新休息控制器以使用MultipartFile []后,我可以使用表格數據選項:

   ResponseEntity<String> startSim(@RequestParam("configList") MultipartFile[] configList);

我還擺脫了HttpOptions並自動設置了內容類型:

// Removed

 const httpOptions = {
          headers: new HttpHeaders({
            'Content-Type': 'multipart/form-data'
          })
    };

您可以使用以下方法發送多個文件:

1.)JSON.stringify

const list = [ 
   { scenarioFile: this.configFile },
   { probabilityFile: this.parameterFile }
];

const formData = new FormData();

formData.append("configList", JSON.stringify(list));

2.)或附加相同的formData鍵

參考: https : //developer.mozilla.org/zh-CN/docs/Web/API/FormData/append

與常規表單數據一樣,您可以附加多個具有相同名稱的值

const formData = new FormData();

formData.append('configList', this.configFile);
formData.append('configList', this.parameterFile);

console.log(formData.getAll('configList'));  // Shows the content of configFile and parameterFile

然后,您可以繼續進行http帖子通話:

this.http
   .post(this.startURL, formData, httpOptions)
   .subscribe(json => console.log(json));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM