我使用的是jdeveloper版本11.1.1.5.0。在我的用例中,我创建了Mail Client Send Mail程序,我使用ADF InputFile组件在邮件上附加文件。
但问题是InputFile Component只返回文件路径(只获取文件名)。在我的邮件程序中,DataSource类使用完整路径来访问文件名。
UploadedFile uploadfile=(UploadedFile) actionEvent.getNewValue();
String fname= uploadfile.getFilename();//this line only get file name.
那么如何使用adf InputFile组件或任何其他方式来获得完整路径来满足我的要求。
答案 0 :(得分:1)
您可以将上传的文件保存在服务器的路径中。只关注命名该文件,因为用户的并发性,您应遵循相关策略,例如,以毫秒为单位添加文件名称。像这样......
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()替换为您喜欢的任何命名策略。
答案 1 :(得分:0)
如果Web应用程序能够查看上载文件的数据流以外的任何内容,那将是一个安全问题。客户端的目录结构不会暴露给webapp。因此,除非您计划从与服务器相同的主机上载文件,否则您将无法访问客户端上的文件路径。
注意:由于声誉阈值而使用答案而不是评论