2014-04-14 12 views
-1

我想上傳一個excel文件。這個文件將被保存在具有重命名而不是文件名的特定路徑中。該重命名包含名稱,當前系統時間和日期。例如上傳一個new.xsl文件,它將被保存,像這樣new_4/14/2014_1:57。我嘗試了很多,但仍然有問題。我在這裏附上我的摘錄。你能告訴我我犯了什麼錯誤嗎?Servlet可以與HTML表單標籤一起使用,以允許用戶上傳文件到服務器

</head> 
<body> 
<h1>welcome to excel upload</h1> 
<form action ="UploadServlet" method ="post" enctype ="multipart/form-data"> 
Upload a selected file: <input type="file" name="file" size="50"><br><br> 
     <input type="submit" value="uploadFile"> 
     <input type="submit" value="cancel"> 
    </form> 
    </body> 
    </html> 
    output:welcome to excel upload 

    Upload a selected file: 




package com.bala; 

import java.awt.List; 
import java.io.File; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Iterator; 
import java.util.Date; 

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 static final long serialVersionUID = 1L; 
private boolean isMultipart; 
    private String filePath; 
    private int maxFileSize = 250 * 1024; 
    private int maxMemSize = 4 * 1024; 
    private File file ; 
    String s1 = " "; 
    String s2 = " "; 
    public void init(){ 

     filePath = 
       getServletContext().getInitParameter("file-upload"); 
     } 
    public UploadServlet() {} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws     ServletException, IOException { 

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(); 
factory.setSizeThreshold(maxMemSize); 
factory.setRepository(new  File("C:/glassfish3/glassfish/domains/domain1/applications/data")); 
ServletFileUpload upload = new ServletFileUpload(factory); 
upload.setSizeMax(maxFileSize); 

try{ 
    // Parse the request to get file items. 
    java.util.List<FileItem> 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>"); 
    while (i.hasNext()) 
    { 
     FileItem fi = (FileItem)i.next(); 
     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(); 
     //* request.setAttribute("UPLOAD_DIRECTORY", file); 
     // Date date = new Date(); 
     //SimpleDateFormat ft = 
       //new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); 
     //String s = ft.format(date); 
     // String filename = "bala"; 
     //String filename1 = s+ "_" + filename; 
     //String fileName1 = file.getFileName(); 
     // out.println(filename1); 
      //Rename the file 
     // File oldfile = new File(s1); 
     // out.println("old file name.."+oldfile); 
     // File newfile = new File(s2); 
      //out.println("new file name..."+newfile); 
     // if(oldfile.renameTo(newfile)){ 
       //filename = "bala" + file.separator +filename1; 
       // 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("Uploading the file successfully." +"<br>"); 

      out.println("Uploaded Filename: " + fileName+"<br>"); 
     } 
    } 

    out.println("</body>"); 
    out.println("</html>"); 
}catch(Exception ex) { 
    System.out.println(ex); 
} 
} 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException,java.io.IOException { 
throw new ServletException("GET method used with " + 
      getClass().getName()+": POST method required."); 
    } 

} 
+2

而你的問題是? – StanislavL

回答

0

通過您的代碼的註釋行後,我想我得到了你正在嘗試做的事情。

檢查該文件是否已經在該文件夾中感染,如果是,則將舊文件重命名爲舊文件並在舊版本上寫入新文件。

如果是這樣的話,

File uploadedFile = new File(fileName); 
if(uploadedFile.exists()){ // We check if there exists an old file 
    String timestamp = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz").format(new Date()); 
    String backupFileName = "bkp_" + timestamp + fileName; 
    uploadedFile.renameTo(new File(backupFileName)); //If there exists , then rename it 
} 
//Now write the new file 

我不能檢查代碼,但是相信你可以明白我的意思了這一點。

有了您的更新

爲什麼不乾脆,

String timestamp = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz").format(new Date()); 
String newFileName = fileName + "_" + timestamp; 
File newFile = new File(newFileName); 
//Now write the new file 
//Well, writing the file to disk do depend on several facts. 
//I guess you are not asking the codes to write the file to disk. 
0

它更好U將僅使用HTML頁面UI目的。
和背面寫servlet代碼。

通過下面的鏈接,它會解決你的問題。

servlets-file-uploading

相關問題