2009-08-05 111 views
3

我有兩個jps頁面來處理單個文件的上傳。 下面是選擇一個文件代碼:在JSP中上傳文件 - 如何更改上傳文件的默認路徑

org.apache.commons.io.FilenameUtils, java.util.*, 
java.io.File, java.lang.Exception" %> 
... 
<form name="uploadFile" method="POST" action="processUpload.jsp"  
enctype="multipart/form-data"> 
    <input type="file" name="myfile"><br /> 
    <input type="submit" value="Submit" /> 
</form> 
.... 

// --------處理上傳的文件-------------------- -

<%@ page contentType="text/html;charset=windows-1252"%> 
<%@ page import="org.apache.commons.fileupload.DiskFileUpload"%> 
<%@ page import="org.apache.commons.fileupload.FileItem"%> 
<%@ page import="java.util.List"%> 
<%@ page import="java.util.Iterator"%> 
<%@ page import="java.io.File"%> 


<% 
    System.out.println("Content Type ="+request.getContentType()); 
    System.out.println("Cookies" + request.getCookies()); 

    DiskFileUpload fu = new DiskFileUpload(); 
    // If file size exceeds, a FileUploadException will be thrown 
    fu.setSizeMax(1000000); 

    List fileItems = fu.parseRequest(request); 
    Iterator itr = fileItems.iterator(); 

    while(itr.hasNext()) { 
     FileItem fi = (FileItem)itr.next(); 

     //Check if not form field so as to only handle the file inputs 
     //else condition handles the submit button input 
     if(!fi.isFormField()) { 
     System.out.println("\nNAME: "+fi.getName()); 
     System.out.println("SIZE: "+fi.getSize()); 
     //System.out.println(fi.getOutputStream().toString()); 
     File fNew= new File(application.getRealPath("/"), fi.getName()); 

     System.out.println(fNew.getAbsolutePath()); 
     fi.write(fNew); 
     } 
     else { 
     System.out.println("Field ="+fi.getFieldName()); 
     } 
    } 
%> 

此代碼將文件放入我的build \ web文件夾中。 如何設置服務器上不同目錄的路徑(假設已設置寫權限)? 謝謝,

回答

2

使用下面的代碼(改編爲user guide):

// Create a factory for disk-based file items 
DiskFileItemFactory factory = new DiskFileItemFactory(); 
factory.setRepository(dir); 

// Create a new file upload handler 
DiskFileUpload upload = new DiskFileUpload(factory); 

// Parse the request 
List /* FileItem */ items = upload.parseRequest(request); 
+0

它工作。它走上了正確的道路。 – Greener 2009-09-10 18:49:06

-1

...嘗試這樣的事:

File newFile = new File(request.getSession().getServletContext().getRealPath("/someUploadDirectoryOnServer/"), multipartFile.getOriginalFilename()); 
0

要設置文件上傳路徑:

<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%> 
DiskFileItemFactory factory = new DiskFileItemFactory(); 
factory.setRepository(new File('/path/to/store/files')); 
DiskFileUpload fu = new DiskFileUpload(factory); 
+0

另外,請注意,DiskFileUpload已棄用,您應該使用ServletFileUpload(或PortletFileUpload)。 – Powerlord 2009-08-05 14:54:29

0

爲什麼在創建文件時不指定路徑?您可以將路徑設置爲應用程序配置(JNI)的一部分,或者在Web服務器啓動時(使用-Dpath = ...)將其設置爲系統屬性,並使用System.getProperty(「path」)讀取它。您甚至可以使用在您的系統上定義的環境變量,並使用System.getenv方法讀取該環境變量。

Alternativaly,你可以使用File.getTempFile方法創建一個臨時文件。如果您只需要保存文件以便對其執行某些操作,而不再使用它,那麼這是一個更好的選擇 - 但是,您必須在使用該文件後自行刪除文件。