2014-01-25 3 views
0

Может кто-нибудь помочь мне с придумать с Java Servlet, который может загружать файлы в этом виде изменения или дать мне какие-либо идеи, как к нему:Java Servlet Multiple File Upload Изменение

5 входного файла тип поля, но заполните только 1 или 2 из них (в любом поле файла) и загрузите их. файлов.

я узнал, проблемы быть:

1) Если я заполнить поле файла не с первого, то он не будет загрузить файл. , например. Я заполняю 3-е поле файла и загружаю его. Файл не будет загружен. Но если я заполню первый, он будет загружен. То же самое, если я заполню любые 2-3 поля, но если я не заполню их по порядку (1,2,3 ...), они не будут загружены.

2) У меня есть переключатель под полями файла. Если я не заполню все поля файла, значения переключателя не будут прочитаны сервлетом. Может кто-нибудь просветить меня, почему это происходит?

Таким образом, он работает тогда и только тогда, когда я заполняю все 5 полей файла и отмечаю один из переключателей.

HTML-код:

<html> 
<head> 
<title>File Uploading Form</title> 
</head> 
<body> 
<h3>Energy Efficient Color Mapping Texture Transformer</h3> 
Select 5 images to upload: <br /> 
<form action="UploadServlet" method="post" 
        enctype="multipart/form-data"> 
<b>Image 1</b>     
<input type="file" name="file1" size="50" /> 
<br /> 
<b>Image 2</b> 
<input type="file" name="file2" size="50" /> 
<br /> 
<b>Image 3</b> 
<input type="file" name="file3" size="50" /> 
<br /> 
<b>Image 4</b> 
<input type="file" name="file4" size="50" /> 
<br /> 
<b>Image 5</b> 
<input type="file" name="file5" size="50" /> 
<br /><br /> 
Select conversion scheme below: <br /> 
<input type="radio" name="scheme" value="1" /> Sat 25 Hue 9 <br /> 
<input type="radio" name="scheme" value="2" /> Sat 25 Hue 24 <br /> 
<input type="radio" name="scheme" value="3" /> Sat 25 Hue 36 <br /> 
<input type="radio" name="scheme" value="4" /> Sat 50 Hue 9 <br /> 
<input type="radio" name="scheme" value="5" /> Sat 70 Hue 9 <br /> 
<input type="radio" name="scheme" value="6" /> Sat 50 Hue 24 <br /> 
<input type="radio" name="scheme" value="7" /> Sat 70 Hue 36 
<br /><br /> 
<input type="submit" value="Upload File" /> 
</form> 
</body> 
</html> 

Так сказать, я хочу, чтобы просто заполнить изображения 3 и 4, и загрузить эти 2 изображения. сервлета:

// Import required java libraries 
import java.io.*; 
import java.util.*; 

import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.FileUploadException; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
import org.apache.commons.io.output.*; 

public class UploadServlet extends HttpServlet { 

private boolean isMultipart; 
private String filePath; 
private int maxFileSize = 5*1024*1024; 
private int maxMemSize = 4 * 1024*1024; 
private File file ; 

public void init(){ 

} 
public void doPost(HttpServletRequest request, 
      HttpServletResponse response) 
      throws ServletException, java.io.IOException { 
    // Check that we have a file upload request 
    isMultipart = ServletFileUpload.isMultipartContent(request); 
    response.setContentType("text/html"); 
    java.io.PrintWriter out = response.getWriter(); 
    if(!isMultipart){ 
    out.println("<html>"); 
    out.println("<head>"); 
    out.println("<title>Servlet upload</title>"); 
    out.println("</head>"); 
    out.println("<body>"); 
    out.println("<p>No file uploaded</p>"); 
    out.println("</body>"); 
    out.println("</html>"); 
    return; 
    } 
    DiskFileItemFactory factory = new DiskFileItemFactory(); 
    // maximum size that will be stored in memory 
    factory.setSizeThreshold(maxMemSize); 
    // Location to save data that is larger than maxMemSize. 
    factory.setRepository(new File("c:\\temp")); 

    // Create a new file upload handler 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    // maximum file size to be uploaded. 
    upload.setSizeMax(maxFileSize); 

    try{ 
    // Parse the request to get file items. 
    List fileItems = upload.parseRequest(request); 

    // Process the uploaded file items 
    Iterator i = fileItems.iterator(); 

    out.println("<html>"); 
    out.println("<head>"); 
    out.println("<title>Servlet upload</title>"); 
    out.println("</head>"); 
    out.println("<body>"); 

    // Get the file location where it would be stored. 
    filePath = 
     getServletContext().getInitParameter("file-upload"); 

    //Create calendar for folder naming purpose 
    GregorianCalendar gcalendar = new GregorianCalendar(); 
    String date=String.valueOf(gcalendar.get(Calendar.DATE)); 
    String month=String.valueOf(gcalendar.get(Calendar.MONTH)+1); 
    String year=String.valueOf(gcalendar.get(Calendar.YEAR)); 
    String hour=String.valueOf(gcalendar.get(Calendar.HOUR)); 
    String minute=String.valueOf(gcalendar.get(Calendar.MINUTE)); 
    String second=String.valueOf(gcalendar.get(Calendar.SECOND)); 

    //create a new filepath 
    filePath= filePath + date+"-"+month+"-"+year+"_"+hour+minute+second; 

    boolean newfolder= (new File(filePath)).mkdirs(); 

    if (newfolder){ 
    System.out.println("Created new folder"); 
    } 

    while (i.hasNext()) 
    { 
    FileItem fi = (FileItem)i.next(); 
    if (fi.isFormField()) 
    { 
     out.println("is a form field <br>"); 
     String fieldName = fi.getFieldName(); 
     String fieldValue = fi.getString(); 
     out.println(fieldName+": "+fieldValue); 
    } 
    else 
    //if (!fi.isFormField())  
    { 
     // Get the uploaded file parameters 
     String fieldName = fi.getFieldName(); 
     String fileName = fi.getName(); 
     String contentType = fi.getContentType(); 
     boolean isInMemory = fi.isInMemory(); 
     long sizeInBytes = fi.getSize(); 
     // Write the file 
     if(fileName.lastIndexOf("\\") >= 0){ 
      file = new File(filePath + "\\" + 
      fileName.substring(fileName.lastIndexOf("\\"))) ; 
     }else{ 
      file = new File(filePath + "\\" + 
      fileName.substring(fileName.lastIndexOf("\\")+1)) ; 
     } 
     fi.write(file) ; 
     out.println("Uploaded Filename: " + fileName + "<br>"); 
    } 
    } 
    out.println("</body>"); 
    out.println("</html>"); 
    }catch(Exception ex) { 
    System.out.println(ex); 
    } 
    } 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
    throws ServletException, java.io.IOException { 

    throw new ServletException("GET method used with " + 
      getClass().getName()+": POST method required."); 
    } 
} 

До сих пор я не видел ни другое изменение, чем у меня, когда я искал для нескольких загрузки файлов с помощью Java Servlet.

ответ

0

ОК, поэтому эта проблема возникает, когда любое из полей файла пуст. Это означает, что fileName также является пустой строкой. Одним из способов решения этой проблемы является добавление условного обозначения для пропуска пустых файлов:

if(fileName.equals("")){ 
continue; 
} 
Смежные вопросы