2016-11-09 21 views
1

私は、angle2(2.1.0)とSpring(microservice)を持つREST APIを持つ単一ページアプリケーションを持っています。マイクロサービスはjHipster(2.3)を介して構築されました。角度とマイクロサービス間の通信は正常に機能します。"Angular2とSpringを使用した 'MultipartFileパラメータ' uploadfile 'が存在しません。

今、ファイルをアップロードしたいと思います。私は豆としてmultipartfilterを設定している春に

<dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>1.3.2</version> 
</dependency> 

:私が持っている

は、依存関係としての私のpom.xmlファイルに必要なライブラリが含まれています。

は、以下を参照してください。

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) 
public class MicroserviceSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    ... 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     //http.addFilterBefore(multipartFilter(), CsrfFilter.class); 
     System.out.println("Loading configure"); 
     http 
     .addFilterBefore(multipartFilter(), CsrfFilter.class) 
      .csrf() 
      .disable() 
      .headers() 
      .frameOptions() 
      .disable() 
     .and() 
      .sessionManagement() 
      .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
     .and() 
      .authorizeRequests() 
      .antMatchers("/api/**").authenticated() 
      .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) 
      .antMatchers("/swagger-resources/configuration/ui").permitAll() 
     .and() 
      .apply(securityConfigurerAdapter()); 

    } 

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

     return commonsMultipartResolver; 
    } 

@Bean 
    @Order(0) 
    public MultipartFilter multipartFilter() { 
      MultipartFilter multipartFilter = new MultipartFilter(); 
      multipartFilter.setMultipartResolverBeanName("commonsMultipartResolver"); 
      return multipartFilter; 
    } 

私のREST-APIメソッド:私はファイルをアップロードするモジュールng2-file-uploadを使用角度で

/** 
* Upload single file using Spring Controller 
*/ 
@RequestMapping(value = "/uploadFile", 
     method = RequestMethod.POST) 
@Timed 
public String uploadFileHandler(@RequestHeader("Authorization") String token, 
     @RequestParam("uploadfile") MultipartFile file) { 
    System.out.println("bin in der Methode: uploadFileHandler"); 
    if (!file.isEmpty()) { 
     // do something 
    } 
} 

HTML:

<input type="file" ng2FileSelect (fileOver)="fileOverBase($event)" [uploader]="uploader" multiple name="uploadfile"/><br/> 

活字体XHRオブジェクトを経由して:私は、ファイルをアップロードすると

uploadFile(file: File): Promise<any> { 

    return new Promise((resolve, reject) => { 

     let xhr: XMLHttpRequest = new XMLHttpRequest(); 
     xhr.onreadystatechange =() => { 
      if (xhr.readyState === 4) { 
       if (xhr.status === 200) { 
        resolve(JSON.parse(xhr.response)); 
       } else { 
        reject(xhr.response); 
       } 
      } 
     }; 

     xhr.open('POST', this.projectAPI + '/uploadFile', true); 
     // If I set the content-type 
     // I don't get an answer in spring 
     //xhr.setRequestHeader('Content-Type', 'multipart/form-data'); 
     xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('id_token')); 

     let formData = new FormData(); 
     console.log(file.name); 
     formData.append("uploadfile", file, file.name); 
     xhr.send(formData); 
    }).catch(this.handleError); 
} 

、私はエラーメッセージが表示されます:

[org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'uploadfile' is not present] 
... <500 Internal Server Error 

間違っていますか?私は何かを忘れましたか?私はどんな助けにも非常に感謝しています。

+0

check http://stackoverflow.com/a/40216616/4793153 – Eswar

+0

エラーは同じです。 これは欠落しているようですSpring設定 –

+0

JHipster 2.3はこの状態でマイクロサービスをサポートしていませんでした... –

答えて

4

解決策が見つかりました。

「WebConfigurer」クラスの設定を変更しました。

@Bean(name = "commonsMultipartResolver") 
public MultipartResolver multipartResolver() { 
    log.info("Loading the multipart resolver"); 
    return new StandardServletMultipartResolver(); 
} 


@Bean 
public MultipartConfigElement multipartConfigElement() { 
    MultipartConfigFactory factory = new MultipartConfigFactory(); 

    factory.setMaxFileSize("10MB"); 
    factory.setMaxRequestSize("10MB"); 

    return factory.createMultipartConfig(); 
} 

私はEswarのソリューションを使用しました。

これで正常に動作します。 〜

+0

'MultipartConfigFactory'は廃止予定とマークされました。私はjHipsterで同じ問題に直面しています.2番目のBeanを 'WebConfigurer.java'に追加しても問題は解決しません。 –

関連する問題