Подтвердить что ты не робот

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";
    }
}
4b9b3361

Ответ 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.