У меня есть следующий блок кода, который обрабатывает загрузку файла фотографии, которую я использую в своем веб-приложении Spring MVC. Я использую Spring MVC CommonsMultipartFileResolver для обработки загрузки файлов.
if(model.getPhoto() != null){
if(!model.getPhoto().isEmpty()){
MultipartFile file = model.getPhoto();
String fileName = file.getOriginalFilename();
String filePath = baseDirectory + fileName;
FileOutputStream fos = new FileOutputStream(filePath);
try
{
fos.write(file.getBytes());
agentProfile.setPhotoUri(fileName);
}
catch (IllegalStateException e)
{
System.out.println(e);
}
finally
{
fos.close();
}
}
}
В моем файле app-servlet.xml у меня есть следующий код для настройки bean-компонента распознавателя MultipartFile.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
У меня возникают некоторые случайные проблемы при загрузке фотографий.
1) Если я загружу фотографию меньшего размера, около 3 КБ или около того, она будет успешно загружена.
2) Если я пойду, чтобы загрузить немного большую фотографию, он создаст файл в каталоге, но с размером 0 байт и выдаст следующее сообщение об ошибке.
java.lang.IllegalStateException: File has been moved - cannot be read again
org.springframework.web.multipart.commons.CommonsMultipartFile.getBytes(CommonsMultipartFile.java:112)
com.mmz.admin.mvc.controller.AddAgentController.processFinish(AddAgentController.java:145)
org.springframework.web.servlet.mvc.AbstractWizardFormController.validatePagesAndFinish(AbstractWizardFormController.java:642)
org.springframework.web.servlet.mvc.AbstractWizardFormController.processFormSubmission(AbstractWizardFormController.java:492)
org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:265)
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:874)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Я испробовал несколько различных вариантов настройки многочастного преобразователя, таких как переключение его для обработки CommonsMultipartFile объекта в отличие от простого MultipartFile объекта, но ничего не изменилось.
Я также попытался вручную настроить максимальный размер загрузки в bean-компоненте CommonsMultipartFileResolver со следующим свойством.
<property name="maxUploadSize" value="1024000000"/>
ничего не изменилось. Я не уверен, что CommonsMultipartResolver по умолчанию соответствует размеру файла, который может быть загружен, но это не мой вопрос.
Мне сказали, что проблема, с которой я сталкиваюсь, связана с проблемой в парсере / обработчике Multipart, который использует spring. У меня был недавний пост об этой же проблеме, и, поскольку была найдена новая информация, я хотел опубликовать новую информацию. Старый пост можно найти по адресу CommonsMultipartFileResolver Проблема
Мне кажется, что я проверил почти все ресурсы в Интернете, чтобы найти дополнительную документацию, но не могу выяснить проблему.
Пожалуйста, помогите мне выяснить, что происходит с этим, и, если есть лучшее, более простое решение, возможно, для изучения этих опций, но я бы предпочел остаться с моим текущим методом, если я могу найти решение.
EDIT
Примечание. Я экспериментировал с фотографиями разных размеров для загрузки, и я считаю, что ограничение, которое он позволяет загружать, составляет около 10 КБ. Все, что больше 10Kb, вызывает его поломку и выдает ошибку выше.