【问题标题】:Retrieve images from a folder outside web root folder using servlet使用 servlet 从 Web 根文件夹外的文件夹中检索图像
【发布时间】:2012-06-13 19:26:43
【问题描述】:

我正在尝试创建一个小型 servlet,它可以上传图像并能够在不同的页面中以幻灯片的形式检索它们。

我可以将它们保存在 WebApp 文件夹之外,但是在检索它们时,我需要它们成为 JSP 的一部分,该 JSP 将具有除图像之外的其他内容。目前,我使用 BufferedImage 和 ImageIO 类一次一个地流式传输图像。

BufferedImage image = ImageIO.read(new File("D:\\"+file.getName()));
ImageIO.write(image, "jpg", response.getOutputStream());

该文件在代码前面被检查为 JPEG 文件类型。

【问题讨论】:

  • 您不应该使用 ImageIO:您正在读取表示 JPG 编码图像的字节,然后将字节流转换为 BufferedImage,然后将此缓冲图像转换为表示 JPG 编码图像的字节.只需读取字节并将它们按原样发送到响应输出流。
  • 是的,我也试过了,方法是使用 BufferedInputStream 简单地读取它们,然后使用 BufferedOutputStream 编写它。这给了我相同的最终结果。我想要的是一张图片列表,而不是一张图片。

标签: java jsp servlets servlet-3.0


【解决方案1】:

您需要了解 HTTP 和 HTML 的工作原理:

  1. 浏览器请求 HTML 页面(第一个请求)
  2. 服务器发回 HTML(和仅 HTML),包含 3 个 <img src="..."/> 标签
  3. 浏览器发送请求以获取第一张图片的字节数(第二次请求)
  4. 服务器发回第一张图片的字节
  5. 浏览器发送请求获取第二张图片的字节数(第三次请求)
  6. 服务器发回第二张图片的字节
  7. 浏览器发送请求获取第三张图片的字节数(第四次请求)
  8. 服务器发回第三张图片的字节

因此,您需要一个 servlet 或 JSP 来生成 HTML 页面,其中包含您所有的 <img src="..."/> 标记。每个标签都应具有以下形式:

<img src="imageServlet?imageId=564"/>

您需要第二个 servlet,映射到 imageServlet,它从文件系统中读取由 imageId 参数值标识的图像字节,并将这些字节写入响应输出流。

【讨论】:

    【解决方案2】:

    它们我需要它们成为 JSP 的一部分,该 JSP 将包含其他内容,

    在 JSP 中使用图像标签

    <image src="/context-root/YourServlet?param=value" alt="blah blah"/>
    

    【讨论】:

    • 我需要有多个这样的图像标签。如何在运行时生成它们?
    猜你喜欢
    • 2021-11-03
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2017-10-07
    • 2019-12-08
    相关资源
    最近更新 更多