【问题标题】:Google App Engine - Generate QR CodeGoogle App Engine - 生成二维码
【发布时间】:2014-06-05 00:35:53
【问题描述】:

最终更新(请参阅 cmets)

由于 GAE 的限制,我已经放弃了实现自己的 QR 生成器。以前的 Google Charts API 服务仍然可以使用,并且还可以使用 ZXing 的 servlet 进行复制。有关更多详细信息,请参阅此link。谢谢你的回答。


更新 2(见下面的原始问题)

所以我挖掘了 ZXing 的源代码,他们似乎在所有流程中都使用了 BufferedImage。我现在的问题可以表述为:

  • 有没有办法将 ZXing 与 Google App Engine 结合使用?
  • 有什么方法可以在 servlet 中生成 QR 码 部署到 Google App Engine?

更新(见下面的原始问题)

以下行显然会导致错误:

MatrixToImageWriter.writeToStream(encoded, "png", outs);

它似乎正在使用 BufferedImage。是否可以在不执行此步骤的情况下将 BitMatrix 转换为 byte[]?


原问题

我正在尝试在 Google App Engine 上创建一个 servlet,以返回具有给定参数的 QR 码。到目前为止,我已经使用 QRGenZXing 创建了解决方案,它们在 App Engine 本地开发模式下测试时可以完美运行。我的问题是,在我将 servlet 部署到 App Engine 后,这两种实现都失败了,说要么

无法初始化类 com.google.apphosting.runtime.security.shared.stub.java.awt.image.BufferedImage

java.awt.Image 是一个受限类。请参阅谷歌应用引擎 开发者指南了解更多详情。

我不完全了解这些工具在内部是如何工作的,我知道 Class whitelist 上没有 java.awt.image 类。我的问题是,有没有办法绕过这个安全功能,并实际上从 servlet 返回一个 QR 码。这是我使用 ZXing(它似乎提供比 QRGen 更多的选项)的最新实现(在开发模式下运行良好,但在部署的 servlet 上也失败):

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
    String returnString = "myString";

    Writer writer = new QRCodeWriter();
    BitMatrix encoded = null;
    try
    {
        encoded = writer.encode(returnString, BarcodeFormat.QR_CODE, 300, 300);
    } 
    catch (WriterException ex)
    {
        Logger.getLogger(QRService.class.getName()).log(Level.SEVERE, null, ex);
    }

    ByteArrayOutputStream outs = new ByteArrayOutputStream();
    MatrixToImageWriter.writeToStream(encoded, "png", outs);
    byte[] out = outs.toByteArray();

    Blob qrImage = new Blob(out);
    resp.setContentType("image/jpeg");
    resp.getOutputStream().write(qrImage.getBytes());
}

【问题讨论】:

标签: java google-app-engine servlets zxing qr-code


【解决方案1】:

在这里,查看 Google Charts API

https://developers.google.com/chart/infographics/docs/qr_codes

它似乎允许您使用简单的 HTTP GET 请求创建二维码。要在 App Engine 中创建 HTTP GET 请求,请尝试以下操作:

https://developers.google.com/appengine/docs/java/urlfetch/

【讨论】:

  • 感谢您的建议。我不喜欢使用已弃用的服务的想法。可以使用复制此功能的 ZXing servlet(我可以确认它有效),但我希望找到实现 QR 码创建的方法,而不是依赖这些服务
  • 我发布的所有内容均未弃用。 Google 服务很稳定,不会很快消失。事实上,我相信他们有一个不推荐使用的政策来保证向后兼容性等。使用图表 API 应该没有问题。
  • Charts API 的信息图表部分已弃用,但您对弃用政策的看法是正确的。复制 GAE QR 码生成的 ZXing servlet 运行良好,请参阅此页面了解更多详细信息:link
猜你喜欢
  • 2012-09-03
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多