Загрузка нескольких файлов с использованием одного запроса сервлета

Я хочу предложить загрузить несколько файлов, нажав кнопку загрузки только один раз. Могу ли я использовать multipart для отправки файлов? Если да, то как?

P.S.: Я не хочу использовать flash или отправлять по одному файлу за раз.


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