0

我正在使用<t:inputFileUpload>from MyFaces从目录中选择一个文件,但是,从ManagedBean,当我尝试获取所选文件的完整路径时,它返回null

看代码:

InsereDocumento.xhtml

            Choose a PDF file:
     <br /> <t:inputFileUpload value="#{inserirBean.uploadedFile}" /> <br />
          <h:commandButton value="inserir" action="#{inserirBean.submit}" />

inserirBean.java - 我只把重要的代码放在这里......

 private UploadedFile uploadedFile;

public void submit() throws IOException {

      String fullPath = FilenameUtils.getFullPath(uploadedFile.getName());
      System.out.println("Full Path: " + fullPath);
    }

   public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

    public void setUploadedFile(UploadedFile uploadedFile) {
        this.uploadedFile = uploadedFile;

    }

它打印任何内容,FilenameUtils.getFullPath(uploadedFile.getName())返回null并且完整路径字符串变量是null.

这里有什么问题?

4

1 回答 1

3

文件上传的客户端磁盘文件系统路径与服务器的关系到底如何?想象一下,你有一个Stringwith value "c:\path\to\password.txt",作为一个运行在不同物理机器上的 Web 服务器,你将如何获取它的内容?

只有暴露出 MSIE 等安全漏洞的浏览器才会错误地发送完整的文件路径以及文件内容。其他(阅读:理智的)浏览器不发送此信息,它们只发送文件名和文件内容。即便如此,这些信息也毫无用处。您不能使用new File()它,原因很简单,因为该文件不在服务器的磁盘文件系统上,而是在客户端的磁盘文件系统上。

您应该对实际的文件内容感兴趣,而不是文件路径,而不是文件名。

InputStream content = uploadedFile.getInputStream();

只需将其写入FileOutputStream服务器的磁盘文件系统,然后使用 File

也可以看看:

于 2013-10-30T14:17:06.243 回答