Oracle adf ADF:使用InputFile组件时如何获取文件路径

Oracle adf ADF:使用InputFile组件时如何获取文件路径,oracle-adf,Oracle Adf,我使用的是jdeveloper版本11.1.1.5.0。在我的用例中,我创建了邮件客户端发送邮件程序,在该程序中,我使用ADF InputFile组件将文件附加到邮件上 但问题是InputFile组件只返回文件的路径(仅获取文件名)。在我的邮件程序数据源类中,使用完整路径访问文件名 UploadedFile uploadfile=(UploadedFile) actionEvent.getNewValue(); String fname= uploadfile.getFilename();/

我使用的是jdeveloper版本11.1.1.5.0。在我的用例中,我创建了邮件客户端发送邮件程序,在该程序中,我使用ADF InputFile组件将文件附加到邮件上

但问题是InputFile组件只返回文件的路径(仅获取文件名)。在我的邮件程序数据源类中,使用完整路径访问文件名

 UploadedFile uploadfile=(UploadedFile) actionEvent.getNewValue();
 String fname= uploadfile.getFilename();//this line only get file name.

因此,如何使用adf InputFile组件或任何其他方式获得完整路径以满足我的要求。

如果web应用程序能够看到上传文件的数据流以外的任何内容,这将是一个安全问题。客户端的目录结构不会向webapp公开。因此,除非您计划从与服务器相同的主机上载文件,否则您将无法访问客户端上的文件路径


注意:由于信誉阈值,使用应答而不是注释,您可以将上载的文件保存在服务器的路径中。只需注意命名该文件,因为用户的并发性,您应该遵循有关该文件的策略,例如,在文件名中添加以毫秒为单位的te时间。像这样

private String writeToFile(UploadedFile file) {
    ServletContext servletCtx =
        (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
    String fileDirPath = servletCtx.getRealPath("/files/tmp");
    String fileName = getTimeInMilis()+file.getFilename();
    try {

        InputStream is = file.getInputStream();
        OutputStream os =
            new FileOutputStream(fileDirPath + "/"+fileName);
        int readData;
        while ((readData = is.read()) != -1) {
            os.write(readData);
        }
        is.close();
        os.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    return fileName;
}

此方法还返回上载文件的新名称。您可以使用任何喜欢的命名策略替换getTimeInMilis()。

为什么要这样做@Manish,您可以使用uploadFile.getInputStream()轻松获取文件内容,如果需要,您可以将其包装到您选择的文件对象中!