你好傢伙我在發佈多部分表單數據在Angular 4.3 + Spring Boot Rest應用程序上遇到問題。無論我把什麼作爲參數放在Java方法中,我都會收到消息「Required request part'arquivo'is present present」或「Required request parameter'arquivo'is present present」。有空參數的角4多部分表格
這裏是表單代碼的一部分:
<form (ngSubmit)="onFormSubmit()" [formGroup]="formulario" enctype="multipart/form-data">
<div formGroupName="sumarizacao">
<div class="row">
<!-- Nome da sumarização -->
<div class="form-group col-sm-3">
<label for="summarizationName">*Nome da Sumarização</label>
<input type="text" class="form-control" id="summarizationName" formControlName="nome" placeholder="Nome">
<div *ngIf="formulario.controls['sumarizacao'].controls['nome'].errors && formulario.controls['sumarizacao'].controls['nome'].dirty"><small> Campo obrigatório</small></div>
</div>
<!-- control file upload -->
<div class="form-group col-sm-9">
<label class="form-control-label custom-submit" id="controlFileLabel" for="envio-arquivo-ctl">Arquivo de controle</label>
<i class="fa fa-check-circle" aria-hidden="true" *ngIf="file != null"></i>
<div>
<input type="file" id="envio-arquivo-ctl" (change)="fileEvent($event)" accept=".ctl">
<div *ngIf="file != null"><p>{{file.name}}</p></div>
<div *ngIf="formulario.controls['arquivo'].name != '' && formulario.controls['arquivo'].dirty"><small> Campo obrigatório</small></div>
</div>
</div>
</div>
<button type="submit" class="btn btn-sm btn-primary" [disabled]="formulario.invalid"><i class="fa fa-check" aria-hidden="true"></i> Gravar</button>
<button type="reset" class="btn btn-sm btn-danger"><i class="fa fa-ban"></i> Resetar</button>
</form>
Post方法:
salvarSumarizacao(formGroup: FormGroup): Observable<Sumarizacao> {
let formData = new FormData();
let header = new HttpHeaders().set('enctype', 'multipart/form-data').set('Accept', 'application/json');
formData.append('sumarizacao', JSON.stringify(formGroup.value.sumarizacao));
if (formGroup.value.arquivo !== '') {
formData.append('arquivo', formGroup.value.arquivo, formGroup.value.arquivo.name);
}
return this.http.post(URIConstantes.SUMARIZACAO, formData, { headers: header })
.map(resp => resp as Sumarizacao)
.catch(this.handleErrorObservable)
}
當我打印FORMDATA或formGroup,它看起來不錯,所有的數據都在那裏,但它似乎就像它在後端發生崩潰一樣。
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON})
public Response incluir(@RequestParam(value="arquivo") MultipartFile arquivo, @RequestParam(value = "sumarizacao") Sumarizacao sumarizacao, HttpServletRequest request) {
ObjectMapper mapper = new ObjectMapper();
//sumarizacao = mapper.readValue(request.getParameter("sumarizacao"), Sumarizacao.class);
//Sumarizacao sumRetorno = sumarizacaoService.incluir(sumarizacao, arquivo.getInputStream());
RetornoResourceDTO<Sumarizacao> retornoResourceDTO = RetornoResourceDTO.<Sumarizacao> criarComResultado(new Sumarizacao());
adicionarMensagemSucesso(retornoResourceDTO);
return Response.ok(retornoResourceDTO).build();
}
當我把HttpServletRequest的作爲一個參數,它給了我零multiPartfiles和MultipartParametersName
當我把參數(@RequestBody字符串測試),「測試」串給我整個請求主體(所有表單數據,並作爲字符串的文件數據,包括邊界)
當我張貼到,它的工作原理和我得到的迴應是: enter image description here
我已經與@RequestPart,@RequestParam,對雙方嘗試,它讓我看到「必需PARAM /一部分不存在」。我也用@FormDataParam嘗試過,對象是空的。 :(