2017-09-05 161 views
1

你好傢伙我在發佈多部分表單數據在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嘗試過,對象是空的。 :(

回答

0

我得到了它與MultipartHttpServletRequest參數和CommonMultipartResolver豆的工作。

@Bean 
    public CommonsMultipartResolver commonsMultipartResolver() { 
     final CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(); 
     commonsMultipartResolver.setMaxUploadSize(-1); 
     return commonsMultipartResolver; 
    } 


@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA, produces = MediaType.APPLICATION_JSON) 
    public Response incluir(MultipartHttpServletRequest http) { } 

我使用Spring 1.5.3引導,春季安全3.2.10和彈簧芯4.3.8