0

在我的网站上;用户可以上传他们的图片。我正在使用带有 apache、hibernate、jpa 的 tomcat。

我更愿意将这些图像保存在某个位置,比如/var/ImagesUploaded我的 ubuntu 盒子上。使用 Java,我可以在目录中引用这些文件,/var/ImagesUploadedjava.io我将如何在 HTML 页面上向用户显示这些图像?在 HTML 文件中,我们需要类似的标签,<img src=''>并且这个 src 是相对于 webapp 的。那么,我是否必须将用户上传的图像仅保留在我的 webapp 中!还是有更好的解决方案?

4

3 回答 3

1

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

于 2012-05-25T19:20:54.423 回答
1

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

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

这篇关于 SO 的帖子也可能很有用。

于 2012-05-25T19:38:14.427 回答
0

你有几个选择:

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

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

  3. 您可以编写自己的 servlet 来自己提供这些位,尽管您最终会复制 DefaultServlet 的许多功能,并且可能在健壮性类别中达不到要求(例如,实现 Range 查询等)

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

于 2012-05-25T19:45:28.313 回答