2013-06-10 5 views
0

Я работал над Spring-приложением, и я столкнулся с некоторыми проблемами с частью Upload Files. В первом сценарии у меня только один тип ввода файла, и он работал нормально, но знаю, что я добавил javascript, который добавляет больше входных данных, и я действительно не знаю, как справиться с этим в контроллере.Загрузите несколько файлов в базу данных с помощью Spring

My JSP выглядит следующим образом:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ page session="false" %> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" type="text/css" href="<c:url value="/resources/css/form-upload.css" />" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <meta name="description" content=""> 
    <meta name="viewport" content="width=device-width"> 
    <link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap.min.css" /> 
    <script type="text/javascript" src="<c:url value="/resources/js/css_browser_selector.js"/>"></script> 
<script type="text/javascript"> 
/** 
    A lot of code that make the "magic" of adding one field 
*/ 
</script> 
</head> 
<body style="background: white;"> 
<c:url var="subeUrl" value="/process/doUpload" /> 
    <form name="file1" method="POST" action="${subeUrl}" enctype="multipart/form-data" class="formulario"> 
     <div id="titulo"><p>Adjuntar archivos</p></div></br> 
     <fieldset id="upload-message"> 
      <table> 
       <tbody id="color_contacts"> 
        <tr valign="top"> 
         <td colspan="5" id="ancho"> 
          <div class="file-wrapper"> 
           <input type="file" name="filename[0]" id="filename[0]" size="9" value="" /> 
           <input name="id_solicitud" type="hidden" value="${id}" /> 
           <div id="hideSpan"><span class="buttones">Choose a file</span></div> 
          </div> 
          <div class="for-same"> 
           <div class="explorer"> 
            <button onclick="javascript:addColorControl();return false;" class="btn btn-success fileinput-button"> 
            <i class="icon-plus icon-white"></i> 
            </button> 
           </div> 
          </div> 
         </td> 
        </tr> 
       </tbody> 
      </table> 
      </br> 
      <div class="post-form"><input type="submit" value="Subir" name="submit" class="post-form" /></div> 
     </fieldset> 
    </form> 
</body> 
</html> 

Как вы можете видеть имена файлов в виде являются "имя_файла [индекс]".

В моем контроллере я попробовал это, но, как вы можете себе представить, это не сработало:

@RequestMapping(value="/doUpload", method=RequestMethod.POST) 
    public String doUpload(HttpServletRequest req, HttpSession session, @RequestParam("filename[]") CommonsMultipartFile[] filename, Map<String, Object> map) throws Exception{ 

     String cod = (String) session.getAttribute("user"); 

     File folder = new File("C:/wamp/www/Uploads/"+ cod + "/"); 
     folder.mkdirs(); 

     Archivo arc = new Archivo(); 

     int a = 0; 
     if (filename[a] != null && filename[a].getSize() > 0 && a < 4) { 
      for (CommonsMultipartFile aFile : filename){ 
       arc.setId_archivo("0"); 
       arc.setId_solicitud(req.getParameter("id_solicitud")); 

       System.out.println("Saving file: " + saveDirectory + cod + "/" + aFile.getOriginalFilename()); 

       if (!aFile.getOriginalFilename().equals("")) { 
        aFile.transferTo(new File(saveDirectory + cod + "/" + aFile.getOriginalFilename())); 
       } 
        if (aFile.getOriginalFilename() != ""){ 
        String nombreArch = "http://localhost/Uploads/direct_download.php?file=" +cod + "/" + aFile.getOriginalFilename(); 
        System.out.println(nombreArch); 
        arc.setArchivo(nombreArch); 
       } 
       else { 
        arc.setArchivo(null); 
       } 
        a ++; 
      } 
      service.agregaFile(arc);   
     } 

     return "cliente/successUp"; 
    } 

Я надеюсь, что кто-то может помочь мне, я довольно новый весной. Заранее спасибо. :)

ответ

0

Ну я Я отвечаю на свой вопрос, это было действительно просто в конце. я просто изменил название входов для filename поэтому все входы имели одинаковое имя и в моем контроллере я изменил это:

@RequestMapping(value="/doUpload", method=RequestMethod.POST) 
    public String doUpload(HttpServletRequest req, HttpSession session, @RequestParam CommonsMultipartFile[] filename, Map<String, Object> map) throws Exception{ 

    String cod = (String) session.getAttribute("user"); 

    File folder = new File("C:/wamp/www/Uploads/"+ cod + "/"); 
    folder.mkdirs(); 

    Archivo arc = new Archivo(); 


    if (filename != null && filename.getSize() > 0) { 
     for (CommonsMultipartFile aFile : filename){ 
      arc.setId_archivo("0"); 
      arc.setId_solicitud(req.getParameter("id_solicitud")); 

      System.out.println("Saving file: " + saveDirectory + cod + "/" + aFile.getOriginalFilename()); 

      if (!aFile.getOriginalFilename().equals("")) { 
       aFile.transferTo(new File(saveDirectory + cod + "/" + aFile.getOriginalFilename())); 
      } 
       if (aFile.getOriginalFilename() != ""){ 
       String nombreArch = "http://localhost/Uploads/direct_download.php?file=" +cod + "/" + aFile.getOriginalFilename(); 
       System.out.println(nombreArch); 
       arc.setArchivo(nombreArch); 
      } 
      else { 
       arc.setArchivo(null); 
      } 
       service.agregaFile(arc); 
     } 

    } 

Просто убрал filename[] части в CommonsMultiPartFile @RequestParam и поставить service.agregaFile(arc) в for. Теперь все работает нормально! Спасибо, в любом случае.

0

Я не уверен, что вы можете ввести CommonsMultipartFile в аргумент метода обработчика, попробуйте использовать org.springframework.web.multipart.MultipartFile.

Также убедитесь, что у вас есть определенный CommonsMultipartResolver на вашем весенний контейнер, как это:

<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 

И Обще-FileUpload банка включена в вашем пути к классам (например: в Maven зависимости)

+0

Привет @gerrytan благодарим за ответ. Как я уже говорил, я использовал этот метод для обработки одной загрузки, и она отлично работала, но я попробую предложить. Я уже определил CommonsMultipartResolver в моем весеннем контейнере, а также имел библиотеку в maven. – Cesar

Смежные вопросы