Невозможно понять это, несмотря ни на что. Я Отправляя эту завиток команды:Spring Boot + метод контроллера multipart/form-data
curl -v -F name=countries.zip -F [email protected] http://localhost:8080/rest
У меня есть Spring загрузочной 1.4 приложения с аннотированным @RestController со следующим методом:
@RequestMapping(consumes = {"multipart/form-data"}, method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}, path = {"/rest", "/rest/**"})
public void handleMultipartRestApiRequest(MultipartHttpServletRequest request, HttpServletResponse response, @RequestPart(value = "filedata", required = false) MultipartFile filedata) throws Exception {
r...
}
FileData переменным всегда нулевая, и объект запроса всегда показывает 0 файлов.
Я пробовал несколько конфигураций с помощью MultipartResolver. Вот моя последняя:
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(5000000);
multipartResolver.setMaxInMemorySize(5000000);
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
}
Я также вручную застрял их в моих application.properties просто быть 1000% уверен, что это не отключено:
multipart.enabled=true
spring.http.multipart.enabled = истинный
и для хорошей меры, вот заголовки запроса:
* Connected to localhost (::1) port 8080 (#0)
> POST /rest HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Length: 817999
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------7d3f4606455e862b
>
кто-нибудь есть ключ, почему Кажется, я не могу видеть файл на моем контроллере?
UPDATE 1:
Если я копать достаточно глубоко в объект запроса и добраться до org.catalina.connector.Request объекта, есть ArrayList элементов ApplicationPart, которые содержат DiskFileItem, что, кажется, содержат информацию о файл, который я пытаюсь загрузить. Это фактически коллекция, которая возвращается при вызове request.getParts(). Путь расположения файла пункт некоторый длинный путь TMP:
/private/var/folders/n8/15d6vbhj0692cslf3cx8c1jm0000gn/T/tomcat.6840182548028446450.8080/work/Tomcat/localhost/myapp
Однако он также говорит, что тип контента приложения/октет-поток, размер -1, и некоторые другие странности, как «isFormField» неверна даже хотя я указываю его как поле формы в моей команде curl. Таким образом, Spring вызывает правильный метод обработки запроса multipart/form-data, но, тем не менее, «часть» информации, похоже, считает, что это октетный поток.
Я скромно думаю, что вы не создали экземпляр вашего многостраничного объекта. Например: MultipartFile filedata = fileToBeAdded.getSomething(); –
Не уверен, что вы имеете в виду ... Я ожидаю файл в запросе. Если я делаю что-то вроде Map map = request.getFileMap() ;, карта пуста. –
Bal
Попробуйте '@ RequestParam' вместо' @ RequestPart'. –