2013-07-23 2 views
1

На моей странице jsp есть два поля: тег <s:file> и тег <s:textfield>.Java Web Application: как получить исходный путь к выбранному файлу?

Я попытался отобразить локальный путь выбранного файла в этом текстовом поле.

Но я не могу найти точное решение для поиска пути локального выбранного файла.

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

Это невозможно по соображениям безопасности, извините.

Вы найдете много дискуссий по этому поводу на StackOverflow и в других местах (иногда со ссылкой на «fakepath» симптом реализации некоторых браузера этой функции безопасности.

Не вдаваясь в излишние подробности, аргументирует эта функция безопасности довольно проста: ни один веб-сайт не должен (читать: иметь возможность) узнать что-либо о файловой системе пользователя. Таким образом, когда файл загружается на сервер, необходимо отправлять только данные файла.

Технически это было возможно в некоторых старых браузерах (например, IE6, я считаю), но на данный момент это довольно повсеместная функция безопасности, и вам будет плохо суждено зависеть от этой информации ,

0

Если вам по-прежнему нужен оригинальный путь, вы можете использовать Internet Explorer.

IE 8 (потому что я протестировал это на IE 8), по умолчанию отправляет полный путь файла к приложению.

0

Вы можете использовать ContextPath в своем сервлете.

Смежные вопросы