【问题标题】:Display dynamically generated image to the browser using jsp使用jsp向浏览器显示动态生成的图像
【发布时间】:2017-07-09 00:38:03
【问题描述】:

我正在使用 jsp/servlets 做一个带有图像的小项目。其中我动态生成了一些图像(实际上我会将两个图像共享解密为一个)。解密后的图像必须直接显示到浏览器而不将其保存为文件在文件系统中。

Crypting c=new Crypting();
BufferedImage imgKey;
BufferedImage imgEnc;
imgKey = ImageIO.read(new File("E:/Netbeans Projects/banking/web/Key.png"));
imgEnc=ImageIO.read(new File("E:/Netbeans Projects/banking/build/web/upload/E.png"));
BufferedImage imgDec=Crypting.decryptImage(imgKey,imgEnc);

当我将它存储在文件系统中并使用<img>显示它时,它不显示图像。重新加载时它显示图像。所以这是IDE的后端工作问题。 任何帮助请...

【问题讨论】:

  • 为什么首先将图像保存在文件系统上,因为这正是您不想做的事情?而是将其写入 HTTP 响应输出流,并设置适当的内容类型。
  • 您可以尝试将最终图像字节流放入base64 并将其嵌入到页面中,请参阅Embedding Base64 Images 在这种情况下您不必将图像保存在文件系统中
  • @JB Nizet 你能提供一些与我上面介绍的代码或任何链接相关的示例代码 sn-p 吗??
  • stackoverflow.com/questions/2340406/…。您的图像不是来自数据库,但原理是相同的:您需要使用 ImageIO.write() 将 BufferedImage 编码为 png(例如),并将编码后的图像写入响应输出流,并使用适当的内容类型,如我刚刚发布的链接中所述。

标签: java html jsp servlets


【解决方案1】:
  1. 制作一个 servlet 来生成图像。
  2. 使用带有属性 src 的 html img 标签作为生成资源的路径。

弹簧靴示例(二维码)。 小服务程序

public class QRCodeServlet extends HttpServlet {
@Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  String url = req.getParameter("url");
  String format =  req.getParameter("format");
  QRCodeFormat formatParam = StringUtils.isNotEmpty(format) && format.equalsIgnoreCase("PDF") ?
    QRCodeFormat.PDF : QRCodeFormat.JPG;

  if(formatParam.equals(QRCodeFormat.PDF))
    resp.setContentType("application/pdf");
  else
    resp.setContentType("image/jpeg");

  if(StringUtils.isNotBlank(url)) {
    ByteArrayOutputStream stream = QRCodeService.getQRCodeFromUrl(url, formatParam);
    stream.writeTo(resp.getOutputStream());
  }
 }
}

配置:

@Configuration
public class WebMvcConfig {
  @Bean
  public ServletRegistrationBean qrCodeServletRegistrationBean(){
    ServletRegistrationBean qrCodeBean =
    new ServletRegistrationBean(new QRCodeServlet(), "/qrcode");
    qrCodeBean.setLoadOnStartup(1);
    return qrCodeBean;
  }
}

控制器:

String qrcodeServletPrefix = "http://localhost:8082/qrcode?url="

String encodedUrl = URLEncoder.encode("http://exmaple.com?param1=value1&param2=value2",  "UTF-8");
modelAndView.addObject("qrcodepage", qrcodeServletPrefix + encodedUrl);
modelAndView.setViewName("view");

view.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<img src="<c:url value='${qrcodepage}'/>" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 2012-11-30
    • 2014-11-13
    相关资源
    最近更新 更多