2017-02-20 7 views
0

У меня есть сервер Дев, который вращается угловую 2 на локальном хосте: 4200, и кот с весны на локальном хосте: 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 

Как исправить эту ошибку?

Спасибо.

UPDATE 1

"продублировать" используется с Spring MVC + JSP, я пытаюсь загрузить файл с помощью Ajax. И версия решения мне не помогает.

UPDATE 2

Spring Boot(v1.4.3.RELEASE)
Я использую конфигурацию Java, если вы хотите, я приведу пример полной конфигурации.

+0

Возможный дубликат [SPRING REST: Запрос был отклонен, потому что не было найдено многочастной границы] (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

Какую версию загрузки весны вы используете и определили ли вы свою собственную конфигурацию webapp? – rajadilipkolli

ответ

0

Я нашел решение своей проблемы, ниже описываю, что я сделал для этого.

В качестве презентации я использую 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(); 
} 
Смежные вопросы