获取Primefaces中本地服务器中部署的上载文件的完整URL

时间:2013-12-16 10:28:33

标签: jsf primefaces

我使用p:fileUpload上传图片。我真的不需要将图像上传到服务器,但我只需要获取保存在服务器中的文件(图像)的完整本地URL(ie.c:/.../../ ..)本地磁盘,我试过,但我刚拿到扩展名的文件名。这是一个在本地使用的Web应用程序,因此服务器和客户端都在同一台机器上。 URL需要保存在数据库中。

1 个答案:

答案 0 :(得分:4)

出于安全原因,浏览器不会发送完整的客户端文件路径。他们只发送文件内容和文件名。古代浏览器和MSIE是唯一一个暴露安全漏洞的浏览器,它仍然发送完整的客户端文件路径以及文件上载。您不应该依赖应用程序中的此安全错误。

你应该抓住InputStream byte[]的{​​{1}}风格的文件内容,然后通过FileOutputStream自己将立即写入更永久的存储位置或者可能通过DB中的@LobBLOB列。如有必要,您可以使用File#createTempFile()自动生成唯一的文件名。

请注意,本地磁盘文件系统路径不能表示客户端可用于获取文件的有效HTTP URL。当初始网页本身由file://而不是http://打开时,Firefox等浏览器拒绝投放file://个网址。因此,您确实需要通过Web服务器提供这些上传的文件。建议只在DB中存储文件名(不是完整路径!)。然后,您可以配置Web服务器以将某个文件夹发布到Web,或者创建一个简单的servlet以将某个文件夹提供给Web。

另见: