Загрузка файла через Spring

579
21 февраля 2017, 16:51

У меня есть dev серевер на котором крутится angular 2 по адрусу localhost:4200, и tomcat со Spring на localhost:8080.
Пробую загрузить файл на сервер следующим способом:
Код angular:

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)
}

Код контроллера Spring:

@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

Как исправить данную ошибку?
Спасибо.

Answer 1

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

В качестве представления я использую 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();
}
READ ALSO
Обрыв wifi Android в проекте с поиском BLE-маяков

Обрыв wifi Android в проекте с поиском BLE-маяков

На проекте есть три экрана: первый - для загрузки данных, используется AsyncTaskВторая получает данные с первой

262
Рестарт приложения

Рестарт приложения

Как возможно до начала своих тестов сделать рестарт приложения или же убить свою активность? Потому как если этого не делать, то данные который...

268
Spring Cache — не удается взять обьекты

Spring Cache — не удается взять обьекты

Добрый день, вроде как все подключил:

290
Как сделать окно google play?

Как сделать окно google play?

Каким образом сделать такое окно?

274