SPRING ОТДЕЛ. Запрос отклонен, поскольку не найдено многочастной границы
Я сделал POC для spring 3 многопользовательской загрузки файла. Его работа прекрасна. Но когда я попытался интегрироваться с моим приложением, я столкнулся с проблемами.
Он выдает следующее исключение:
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;
nested exception is org.apache.commons.fileupload.FileUploadException:
the request was rejected because no multipart boundary was found**"
Пожалуйста, дайте мне знать, если я ошибаюсь в любой части моего кода.
Beans:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="file" value="multipart/mixed" />
</map>
</property>
</bean>
<!-- multipart resolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="50000000" />
</bean>
Контроллер:
@Controller
public class MultipleFilesRecieve {
@RequestMapping ( value = "/saveMultiple", method = RequestMethod.POST )
public String save( FileUploadForm uploadForm ) {
List<MultipartFile> files = uploadForm.getFiles( );
List<String> fileNames = new ArrayList<String>( );
if ( null != files && files.size( ) > 0 ) {
for ( MultipartFile multipartFile : files ) {
String fileName = multipartFile.getOriginalFilename( );
fileNames.add( fileName );
}
}
return "multifileSuccess";
}
}
Ответы
Ответ 1
Проблема не в вашем коде - это в вашем запросе. В вашем многостраничном запросе отсутствует граница. Как сказано в спецификация:
Поле Content-Type для многочастных объектов требует одного параметра, "граница", которая используется для указания границы инкапсуляции. граница инкапсуляции определяется как линия, состоящая полностью из двух дефис ( "-", десятичный код 45), за которым следует граница значение параметра из поля заголовка Content-Type.
Этот и этот должен также быть полезен.
Ответ 2
Используете ли вы какие-либо фильтры безопасности?
Моя проблема была решена путем удаления цепочки фильтров безопасности.
Из этого:
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(this.springSecurityFilterChain).build();
:
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
Я открыл вопрос, где я объясню детали:
https://jira.spring.io/browse/SPR-12114
Ответ 3
@sermolaev прав в своем ответе.
Я хочу поделиться своим опытом, связанным с этой проблемой. Я столкнулся с этой проблемой в Postman, но я не мог понять причину этого в течение длительного времени. Мой шаблон запроса, по-видимому, был правильным, потому что почтальон включил boundary
в него...
В конце концов я обнаружил, что когда вы указываете заголовок Content-Type=multipart/form
самостоятельно, он переопределяет тот, который автоматически добавляется Postman. И это приводит к той же ошибке, что и ваша. Мое решение было так же просто, как удалить заголовок Content-Type
.