首页 文章

Google App Engine - 生成QR码

提问于
浏览
2

最后更新(请参阅评论)

由于GAE的限制,我放弃了实施自己的QR发生器 . 以前的Google Charts API服务仍然可以使用,也可以使用ZXing的servlet进行复制 . 有关详细信息,请参阅link . 谢谢你的答案 .


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

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

  • 有没有办法将ZXing与Google App Engine一起使用?

  • 有没有办法在可以部署到Google App Engine的servlet中生成QR代码?


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

以下行显然导致错误:

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

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


原始问题

我正在尝试在Google App Engine上创建一个servlet,以返回包含给定参数的QR代码 . 到目前为止,我已经使用QRGenZXing创建了解决方案,这些解决方案在App Engine local development 模式下进行测试时非常有效 . 我的问题是,在将我的servlet部署到App Engine后,这两个实现都失败了

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

要么

java.awt.Image是一个受限制的类 . 有关详细信息,请参阅Google App Engine开发人员指南 .

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

@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());
}

1 回答

相关问题