У меня есть следующий блок кода, который обрабатывает мою загрузку файла фотографии, которую я использую в своем веб-приложении Spring MVC. Я использую Spring MVC CommonsMultipartFileResolver для обработки загрузки файлов.Проблема с Spring FileUpload
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 У меня есть следующий код для настройки компонента-преобразователя 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 объекта, но ничего не изменилось.
Я также попытался настроить максимальный размер загрузки в компоненте CommonsMultipartFileResolver со следующим свойством.
<property name="maxUploadSize" value="1024000000"/>
ничего не изменилось. Я не уверен, что CommonsMultipartResolver по умолчанию имеет размер файла, который может быть загружен, но это не мой вопрос.
Мне сказали, что проблема, с которой я столкнулся, связана с проблемой в парсере/обработчике Multipart, который использует весна. У меня была недавняя публикация об этой же проблеме, и потому, что была найдена новая информация, хотелось переписать новую информацию. Старый пост можно найти по адресу CommonsMultipartFileResolver Problem
Я чувствую, что проверял почти каждый ресурс в Интернете, чтобы найти дополнительную документацию, но не могу понять проблему.
Пожалуйста, помогите мне разобраться, что с этим связано, и если есть более эффективное решение, чтобы, возможно, изучить эти параметры, но я бы предпочел остаться с моим текущим методом, если я смогу найти решение.
EDIT Примечание- Я экспериментировал с разными фотографиями размера для загрузки, и я считаю, что предел, что это позволяет мне загрузить около 10Kb. Все, что больше, чем 10Kb, заставляет его сломаться и дать мне ошибку выше.
см. Http://stackoverflow.com/questions/11792107/multipartresolver-is-not-working – lrkwz