【发布时间】:2021-09-13 22:14:00
【问题描述】:
我正在使用 angular 和 spring,我在后端遇到问题:
org.springframework.web.multipart.MultipartException: Current request is not a multipart request
我尝试将 xlsx 或 xlsm 文件发送到后端。
我已经尝试在标题中添加 enctype="multipart/form-data" 和 "Content-Type": "multipart/form-data"。
我应该添加什么来接受多部分请求?
谢谢。
上传文件.service.ts
import { Injectable } from '@angular/core';
import { HttpClient, HttpRequest, HttpHeaders, HttpEvent, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from 'src/environments/environment';
import { CommonData } from '@arom/arom-platform-auth-lib';
@Injectable({
providedIn: 'root'
})
export class UploadFileService {
private headers: HttpHeaders;
private commonData: CommonData;
constructor(private http: HttpClient) {
this.commonData = new CommonData();
this.headers = new HttpHeaders(this.commonData.getCommonHeaders());
}
upload(fichier: File, idAffaire: string): Observable<Object> {
console.log('Appel du webservice insererFichierExportGTI');
let url = this.getPqiPath();
url += environment.services.pqi.endpoints.postgtiservice;
let params: HttpParams = new HttpParams().set('idAffaire', idAffaire);
const formData: FormData = new FormData();
formData.append('fichier', fichier);
return this.http.post(url, { headers: this.headers, "Content-Type": "multipart/form-data", "fichier": formData, "idAffaire": idAffaire });
}
private getPqiPath(): string {
let url: string = environment.services.protocol;
url += '://';
url += environment.services.hostname;
url += ':';
url += environment.services.gateway.port;
url += environment.services.pqi.route;
return url;
}
}
gti-rechercher.component.html
<div class="container">
<form method="post" action="/" enctype="multipart/form-data">
<div class="form-row">
<div class="col-md-8">
<label for="parcourir_bouton">Fichier GTI :</label>
<input pfmButton type="file" class="form-control-file" id="parcourir_bouton" name="import"
formControlName="import" ngModel accept=".xlsx, .xlsm" (change)="selectFile($event)">
</div>
<div class="col-md-6">
<button pfmButton type="submit" id="importer_bouton" class="btn btn-primary mb-2"
(click)='two.startTimer(); upload()'>Importer</button>
</div>
</div>
</form>
<app-gti-timer #two></app-gti-timer>
</div>
AffaireController.java
@RequestMapping(value=("/api"),headers=("content-type=multipart/*"))
public class AffaireController extends AromController {
@Autowired
ServiceAffaire serviceAffaire;
@PreAuthorize("#oauth2.hasScope('ma_tsc_insertion-export-fichier-gti')")
@PostMapping(value = "/insererFichierExportGTI")
@HystrixCommand(threadPoolKey = "domainThreadPool")
public ResponseEntity<ApiResponse<JsonMessage>> insererFichierExportGTI(Long idAffaire,
@RequestParam("file") MultipartFile fichier) {
JsonMessage retour = new JsonMessage();
retour.setMessage(serviceAffaire.insererFichierExportGTI(idAffaire, fichier));
return getResponse(retour);
}
}
【问题讨论】:
-
http.post的第二个参数是帖子有效负载或帖子正文。您正在发送一个包含标题和表单数据的对象。您需要更正邮政编码。 -
@R.Richards 谢谢你,你让我走上了正轨。