Качване на множество файлове с помощта на една заявка за сервлет

Искам да предложа да кача няколко файла, като щракна върху бутона за качване само веднъж. Мога ли да използвам multipart за изпращане на файлове? Ако да, тогава как?

P.S.: Не искам да използвам флаш или да изпращам файл по файл.


person rehan    schedule 18.02.2013    source източник


Отговори (3)


Във вашия HTML можете да направите следното:

<input accept="image/jpeg,image/gif,image/png" type="file" name="upload[]" multiple/>

добавянето на multiple в края на въведеното ви дава това, което искате.

person syrkull    schedule 18.02.2013

Надявам се това да помогне...

//JSP File

<html>
<head><title>Upload page</title></head></p> <p><body>
<form action="upload_file" method="post" enctype="multipart/form-data" name="form1" id="form1">
<center>
 Specify file: <input name="file" type="file" id="file">
 Specify file: <input name="file" type="file" id="file">
 Specify file:<input name="file" type="file" id="file">
 <input type="submit" name="Submit" value="Submit files"/>
<center>
</form>
</body>
</html>


//Servlet Page

import java.util.List;
import java.util.Iterator;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.*;

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
   if (!isMultipart) {
   }
   else{
      FileItemFactory factory = new DiskFileItemFactory();
      ServletFileUpload upload = new ServletFileUpload(factory);
      List items = null;
      try {
          items = upload.parseRequest(request);
          } catch (FileUploadException e) {
               e.printStackTrace();
          }
      Iterator itr = items.iterator();
      while (itr.hasNext()) {
           FileItem item = (FileItem) itr.next();
           if (item.isFormField()) {
           } else {
           try {
              String itemName = item.getName();
              File savedFile = new File(config.getServletContext().getRealPath("/")+"uploadedFiles/"+itemName);
              item.write(savedFile);
              out.println("<tr><td><b>Your file has been saved at the loaction:</b></td></tr><tr><td><b>"+config.getServletContext().getRealPath("/")+"uploadedFiles"+"\\"+itemName+"</td></tr>");
              } catch (Exception e) {
                   e.printStackTrace();
              }
       }
}
person Sabarish    schedule 18.02.2013
comment
Благодаря за отговора ви, но не мога да използвам spring, мога да използвам само сервлети 2.5 - person rehan; 23.02.2013
comment
Актуализиран отговор любезно го потвърдете - person Sabarish; 25.02.2013
comment
Не, не мога да използвам apache commons (или каквато и да е външна библиотека), също така трябва да наблюдавам напредъка на колко файла е качен. които трябва да обработвам в JS :) - person rehan; 25.02.2013

Да, можеш. Опитайте библиотека за качване на файлове на apache, можете да се обърнете към този въпрос в stackoverflow: Качване на множество файлове в Jsp с помощта на API за качване на общи файлове на Apache или този пълен пример. Също така можете да използвате Spring, като препратите към тази статия.

person Hui Zheng    schedule 18.02.2013
comment
Благодаря за отговора ви, но не искам да използвам външни библиотеки или API - person rehan; 23.02.2013