2013-07-23 59 views
1

我的jsp頁面有兩個字段:一個<s:file>標記和一個<s:textfield>標記。Java Web應用程序:如何獲取選定文件的原始路徑?

我試圖在該文本字段中顯示所選文件的本地路徑。

但我無法找到一個確切的解決方案來檢索本地選定的文件路徑。

Upload.jsp

<body> 
    <s:form action="select" method="post" theme="simple" name="f1" enctype="multipart/form-data"> 
     <s:file name="upload" id="ff" size="40" onchange="javascript:submitForm();"/><br> 
     <s:label value="file path"/> 
     <s:textfield name="uploadPath" id="path"/><br> 
    </s:form> 

    <script type="text/javascript"> 
     function submitForm(){ 
      var filepath=document.f1.upload.value; 
      alert(filepath); 
      document.forms[0].submit(); 
     } 
    </script> 

</body> 

SelectAction.java(表單提交時方法selectForder()將被調用)

import com.opensymphony.xwork2.ActionSupport; 
import java.io.File; 
import javax.servlet.http.HttpServletRequest; 
import org.apache.struts2.ServletActionContext; 
import org.apache.struts2.interceptor.ServletRequestAware; 
public class SelectAction extends ActionSupport implements ServletRequestAware{ 

    private File upload; 
    private String uploadPath; 
    private String uploadFileName; 
    private HttpServletRequest servletRequest; 


    public void setUpload(File upload) { 
    this.upload = upload; 
    } 

    public void setUploadFileName(String uploadFileName) { 
    this.uploadFileName = uploadFileName; 
    } 

    public String getUploadPath() { 
    return uploadPath; 
    } 

    public void setUploadPath(String uploadPath) { 
    this.uploadPath = uploadPath; 
    } 

    public void setServletRequest(HttpServletRequest servletRequest) { 
    this.servletRequest=servletRequest; 
    } 

    public String selectFolder(){ 

    //I can't get the local path of the selected file with below codes 

    System.out.println("1 "+uploadFileName); 
    System.out.println("2 "+upload.getAbsoluteFile().getPath()); 
    System.out.println("3 "+upload.getAbsolutePath()); 
    uploadPath=uploadFileName; 


    try{ 
    System.out.println("4 "+servletRequest.getRealPath(upload.getPath())); 
    System.out.println("5 "+servletRequest.getRealPath(uploadFileName)); 
    System.out.println("6 "+servletRequest.getSession().getServletContext().getRealPath("/")); 

    System.out.println("7 "+ServletActionContext.getServletContext().getRealPath("/files")); 


    System.out.println("8 "+SelectAction.class.getProtectionDomain().getCodeSource()); 


     } 
     catch(Exception e) 
     { 
     System.out.println(e); 
     } 
     return SUCCESS; 
     } 

} 
+0

瀏覽器提交的路徑因瀏覽器而異;您只能檢索瀏覽器發送的內容 - 一些只發送名稱。 –

+1

請停止將代碼放入評論;編輯問題如果你認爲它有幫助。 –

+0

我在這裏是新的,如何編輯問題?請幫助我.... – JuJu

回答

1

這是不可能出於安全考慮,對不起。

你會發現很多的討論,這個在計算器上,並在參考了一些瀏覽器的實現此安全功能的「fakepath」症狀在其他地方(有時。

沒有進入太多細節,對於推理這個安全功能非常簡單;沒有網站需要(讀取:能夠)找出關於用戶文件系統的任何信息,因此,當文件上傳到服務器時,只需要發送文件數據。

從技術上講,它可能在一些較舊的瀏覽器中(例如:我相信IE6),但在這一點上它是一個非常普遍的安全功能,並且您將不能依賴此信息。

0

如果您仍然需要原始路徑,則可以使用Internet Explorer。

IE 8(因爲我已經在IE 8上測試過了),默認情況下會將文件的完整路徑發送給應用程序。

0

您可以在您的servlet中使用ContextPath。

相關問題