Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Web应用程序:如何获取所选文件的原始路径?_Java_Jsp_Jakarta Ee_Struts2 - Fatal编程技术网

Java Web应用程序:如何获取所选文件的原始路径?

Java Web应用程序:如何获取所选文件的原始路径?,java,jsp,jakarta-ee,struts2,Java,Jsp,Jakarta Ee,Struts2,我的jsp页面中有两个字段:一个标记和一个标记 我试图在该文本字段中显示所选文件的本地路径 但我无法找到检索本地选定文件路径的确切解决方案 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" o

我的jsp页面中有两个字段:一个
标记和一个
标记

我试图在该文本字段中显示所选文件的本地路径

但我无法找到检索本地选定文件路径的确切解决方案

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>

出于安全原因,这是不可能的,抱歉

你会在StackOverflow和其他网站上找到关于这一点的大量讨论(有时会提到某些浏览器实现此安全功能的“伪造路径”症状)

没有太多细节,这个安全特性的理由很简单;没有网站需要(阅读:能够)了解用户文件系统的任何信息。因此,当文件上载到服务器时,只应发送文件数据


从技术上讲,这在一些较旧的浏览器中是可能的(例如:我相信IE6),但在这一点上,这是一个非常普遍的安全功能,如果您依赖这些信息,那将是命运多舛的。

出于安全原因,这是不可能的,抱歉

你会在StackOverflow和其他网站上找到关于这一点的大量讨论(有时会提到某些浏览器实现此安全功能的“伪造路径”症状)

没有太多细节,这个安全特性的理由很简单;没有网站需要(阅读:能够)了解用户文件系统的任何信息。因此,当文件上载到服务器时,只应发送文件数据


从技术上讲,在一些较旧的浏览器(例如:我相信IE6)中,这是可能的,但在这一点上,这是一个非常普遍的安全功能,依赖这些信息是命中注定的。

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


IE 8(因为我已经在IE 8上测试过了),默认情况下会将文件的完整路径发送到应用程序。

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


IE 8(因为我已经在IE 8上测试过)默认情况下,会将文件的完整路径发送到应用程序。

您可以在servlet中使用ContextPath。

您可以在servlet中使用ContextPath。

浏览器提交的路径因浏览器而异;您只能检索浏览器发送的内容,有些只能发送名称。请停止将代码放入注释中;如果这样做,请编辑问题nk很有帮助。我是新来的,如何编辑问题???请帮助我…@jujuju编辑链接在你问题的标签下。@RomanC我知道了..编辑浏览器提交的路径因浏览器而异;你只能检索浏览器发送的内容,有些只能发送名称。请停止将代码放入注释中;如果你认为有帮助,请编辑问题pful。我是新来的,如何编辑问题???请帮助我…@JuJu编辑链接在你问题的标签下。@RomanC我知道了..编辑
 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;
      }

 }