2017-02-20 23 views
0

上傳文件I具有位於localhost旋轉角2 dev的服務器:4200,和Tomcat與Spring在localhost:8080 我嘗試上載以下面的方式一個文件到服務器:通過Spring

角代碼:

uploadAvatar(file:File){ 
    let xhr = new XMLHttpRequest() 
    xhr.open("POST",`http://localhost:8080/api/upload/avatar`) 
    xhr.setRequestHeader("Content-Type","multipart/form-data") 
    xhr.send(file) 
} 

控制器代碼彈簧:

@RequestMapping(value = "/api/upload/avatar", method = RequestMethod.POST) 
public String uploadFile(MultipartFile file){ 
    log.info(file); 
    return file.getName(); 
} 

但是,試圖下載文件時錯誤後出現在java控制檯:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 
nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found 

如何解決這個問題?

謝謝。

更新1

「複製」 用於Spring MVC的JSP +,我想通過Ajax下載文件。這個決定的版本並沒有幫助我在那裏。

更新2

Spring Boot(v1.4.3.RELEASE)
我使用java的配置,如果你想,我會給出一個完整配置的一個例子。

+0

[彈簧安置的可能的複製:該請求被拒絕,因爲沒有發現多部分邊界](http://stackoverflow.com/questions/17462642/spring-rest-the-request-was-rejected-because-no-multipart-boundary-was-found) –

+0

[如何在AngularJS中上載多部分表單?](http://stackoverflow.com/questions/26162132/how-do-i-upload-a-multipart-form-in-angularjs)可能存在重複。一般來說,您需要將您的請求編碼爲多部分提交。特別是[這個答案](http://stackoverflow.com/a/26162908/6768037)在上面的線程可能會有所幫助。 –

+0

你正在使用哪種版本的spring boot,並且是否定義了自己的webapp配置? – rajadilipkolli

回答

0

我找到了解決我的問題的方法,我在下面的postorabs詳細描述了我爲此所做的工作。

作爲演示我使用Angular 2,發送文件發生在以下方式。

uploadFile(file:File){ 
    let form = new FormData(); 
    form.append("file",file) 

    let xhr = new XMLHttpRequest() 
    xhr.open("POST",`${URL}/api/upload/avatar`) 
    xhr.send(form) 
} 

Content-Type並且在這種情況下,boundary,將自動鏈接。

以下操作需要在服務器希隆斯克斯拖完成:

添加兩個豆:

@Bean(name = "commonsMultipartResolver") 
public MultipartResolver multipartResolver() { 
    return new StandardServletMultipartResolver(); 
} 


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

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

    return factory.createMultipartConfig(); 
} 

控制器看起來是這樣的:

@RequestMapping(value = "/api/upload/avatar", method = RequestMethod.POST,consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 
public String uploadFile(@RequestPart MultipartFile file){ 
    log.info(file); 
    return file.getOriginalFilename(); 
}