Java 在JSF2.2中上载文件
使用我公司选择的云存储api,刚刚开始使用JSF2.2。尝试构建一个简单的图像上传web应用程序,当我使用Eclipse在本地运行时,它就可以工作了 以下是代码: .xhtml页面Java 在JSF2.2中上载文件,java,file-upload,jsf-2,tomcat7,Java,File Upload,Jsf 2,Tomcat7,使用我公司选择的云存储api,刚刚开始使用JSF2.2。尝试构建一个简单的图像上传web应用程序,当我使用Eclipse在本地运行时,它就可以工作了 以下是代码: .xhtml页面 <h:form id="form" enctype="multipart/form-data" prependId="false"> Select id Photo: <h:inputFile id="file" value="#{customerEntity.uploadedFile}"/>
<h:form id="form" enctype="multipart/form-data" prependId="false">
Select id Photo: <h:inputFile id="file" value="#{customerEntity.uploadedFile}"/>
<h:commandButton value="Query Cloud"
action="#{customerEntity.addActionController}"/>
</h:form>
在本地计算机上,从部件对象uploadedFile提取文件名的代码生成正确的文件定位器(例如c:\pictures\mypix.jpg),以便在我的计算机上进行本地访问
但是,当我加载到在云vm中运行的tomcat 7中时,应用程序会失败,并在“try”块中找到一个FileNotFound:
File source = new File(this.fileURI);
try {
cloud.upload(new FileInputStream(source), source.length());
我的调试语句显示它正在使用本地pc上的文件定位器,而服务器上显然不存在该定位器。我不知道如何将本地文件数据流式传输到服务器上运行的代码
作为一个jsf新手,我确信这是显而易见的,但我无法通过我看到的其他帖子来理解或解决
任何指导都将不胜感激 你犯了一个相当严重的概念错误。您不应该对客户端指定的上载文件路径/名称感兴趣。相反,您应该对上传文件的内容感兴趣。由于两个主要原因:
new File()
,因为它们可以访问完全相同的本地磁盘文件系统结构。这在现实世界中是不会发生的uploadedFile.write("/path/to/uploads/somefilename.ext");
注意:您需要确保somefilename.ext
部分在其文件夹中是唯一的。如有必要,您可以使用File#createTempFile()
根据文件名前缀和后缀在给定文件夹中自动生成唯一的文件名
File file = File.createTempFile("somefilename-", ".ext", new File("/path/to/uploads"));
uploadedFile.write(file.getAbsolutePath());
另见:
File file = File.createTempFile("somefilename-", ".ext", new File("/path/to/uploads"));
uploadedFile.write(file.getAbsolutePath());