Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring 3 + file upload


Автор: JokerJo 14.9.2011, 03:38
Знатоки, привет всем. Столкнулся тут на курсах с загрузкой файлов на фреймворке Spring 3. Может кто то сможет помочь с этим вопросом. Если можно помогите с формой, контроллером, валидатором, XML, использованием аннотаций. Знаю что прошу много, хотя бы направьте на путь истинный.

Автор: Nofate 14.9.2011, 09:13
Все подробно описано в http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html#mvc-multipart. 

Если коротко. Добавляем в проект библиотеку commons-fileupload. В конфиге создаем соответствующий бин:
Код

  <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <beans:property name="maxUploadSize" value="10000000"/>    
  </beans:bean>


Делаем форму отправки:
Код

<form method="POST" action="путь_к_контроллеру" enctype="multipart/form-data">
  <input type="text" name="description" />  
  <input type="file" name="file" />
  <input type="submit" />
</form>


Ну и сам контроллер:
Код

@Controller
public class UploadController {
  
  @RequestMapping(value="/upload", method=RequestMethod.POST)
  public String handleUpload(@RequestParam("description") String description, @RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {
      System.out.println("File uploaded.");
      System.out.println("Description: " + description);

      byte[] fileData = file.getBytes();
       
      //тут пишем самостоятельно сохранение массива байт в файл
       
       return "redirect:uploadSuccess";
    } else {
       return "redirect:uploadFailed";
    }
  }
}

Автор: JokerJo 14.9.2011, 09:55
Примерно все так и делал, но при добавлении бина для multipartResolver - проект не деплоится, а при  enctype="multipart/form-data" не подхватывается контроллер формы при сабмите.
метод контроллера, который не подхватывается:
Код

@RequestMapping(method = RequestMethod.POST )
    public String processSubmit(
            @ModelAttribute("customer") Customer customer,
            BindingResult result, SessionStatus status) {


УПД:
при попытке деплоить ругается на 
Код

ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/servlet/ServletFileUpload. Please see server.log for more details.

The module has not been deployed.
    at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:210)
    at org.netbeans.modules.maven.j2ee.ExecutionChecker.performDeploy(ExecutionChecker.java:173)
    at org.netbeans.modules.maven.j2ee.ExecutionChecker.executionResult(ExecutionChecker.java:125)
    at org.netbeans.modules.maven.execute.MavenCommandLineExecutor.run(MavenCommandLineExecutor.java:203)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)


Автор: Nofate 14.9.2011, 14:23
А вы точно выполнили пункт  "Добавляем в проект библиотеку commons-fileupload" ?

Автор: oreh 21.1.2012, 23:26
подниму тему
Один файл хорошо, но нужно несколько... 
Помогите у кого есть решение для обработки формы для Spring 3 со всеми наворотами (применение spring tag form, чтоб можно было закачивать заранее неизвестное количество файлов, чтоб кроме файлов были текстовые поля и их валидация )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)