我应该在哪里保存用户在我的服务器上上传的文件?

时间:2012-05-25 19:17:55

标签: java html tomcat

在我的网站上;用户可以上传他们的照片。我正在使用tomcat与apache,hibernate,jpa。

我希望将这些图像保存在我的ubuntu框中的某个位置,例如/var/ImagesUploaded。使用Java我可以使用/var/ImagesUploaded在目录java.io中引用这些文件,但是如何在HTML页面上向用户显示这些图像?在HTML文件中,我们需要像<img src=''>这样的标签,这个src与webapp相关。那么,我是否必须将用户上传的图像保留在我的webapp中!或者有更好的解决方案吗?

3 个答案:

答案 0 :(得分:1)

将您的网络服务器配置为/var/imagesUploaded的服务器文件(例如,/imguploads),或者使用读取图像的脚本并将其输出给用户,并使用正确的标题。

答案 1 :(得分:1)

如何阅读应用程序中的图像,然后将它们作为base64编码流提供给用户?这样,您就不必将您的图像目录暴露给Web,并且可以有效地防止它被机器人抓取。

  1. 使用java.io
  2. 在应用程序中将文件作为InputStream读取
  3. 使用Apache Commons Codec将其转换为Base64。 encodeBase64URLSafeString(IOUtils.toByteArray(yourImageAsInputStream);
  4. 在您的回复HTML中,将图片嵌入为<img src="data:image/jpeg;base64,encodedString">
  5. 关于SO的

    This帖子也可能有用。

答案 2 :(得分:0)

您有几种选择:

  1. 如果您使用的是Tomcat 7,则可以使用&lt; Context&gt;中的“别名”功能。元素(http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Standard_Implementation)

  2. 您可以尝试在某些特殊路径上映射DefaultServlet,例如“/ uploads / *”,但要注意某些版本的Tomcat有一个DefaultServlet,当它未映射到“/”时基本上无法正常工作“

  3. 您可以编写自己的servlet来自己提供这些位,但最终会复制DefaultServlet的许多功能,并且可能会在健壮性类别中无法实现(例如,实现Range查询等)< / p>

  4. 请注意,如果您编写自己的servlet,则可以选择对授权访问某些资源执行基于用户的检查。也许你不希望谷歌可以访问你的整个上传目录。