【问题标题】:How to save QRCode image file I've just generate to server?如何将我刚刚生成的二维码图像文件保存到服务器?
【发布时间】:2013-07-02 16:34:26
【问题描述】:
public class QRCodeServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String qrtext = request.getParameter("qrtext");
            ByteArrayOutputStream out = QRCode.from(qrtext).to(ImageType.PNG).stream();

            response.setContentType("image/png");
            response.setContentLength(out.size());

            OutputStream outStream = response.getOutputStream();        
            outStream.write(out.toByteArray());
            outStream.flush();
            outStream.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

这是我用来生成二维码的代码。我使用 outputStream 将 QRCode 显示到浏览器。但是如何将该 QRCode 保存为服务器上的图像文件并使用标签将其显示在另一个 html 文件中? 我在这里使用 iText 库生成 QrCode。

【问题讨论】:

    标签: java html servlets qr-code outputstream


    【解决方案1】:

    如果save是可选的,但是需要在HTML文件中显示(实际上是一个JSP)……接下来呢?

    如果请求中有参数txt

    <% var txt = request.getParameter("txt"); %>
    <img src="/context/servletMapping?qrtext=<%=java.net.URLEncoder(txt, "UTF-8")%>">
    

    对于 JSTL,请参阅 How to URL-encode a String with JSTL?

    【讨论】:

      【解决方案2】:

      只需使用 FileOutputStream 将 ByteArrayOutputStream 的内容写入。与您将内容写入响应输出流的方式相同。将文件写入通过 HTTP 可用的某个位置(例如 apache 安装的文档根目录等),您可以从 HTML 中引用它。

      您可以尝试的另一种方法是将图像直接内联到您的 HTML 代码中(新浏览器通过数据 URI 支持这一点)

      【讨论】:

        【解决方案3】:

        保存ByteArrayOutputStream图像的代码示例

        String imageDir = //directory to save
        String fileName = //file name
        ByteArrayOutputStream out = //image byte arary
        File file = new File(imageDir, fileName);
        OutputStream outStream = new FileOutputStream(newFile);
        outStream.write(out.toByteArray());
        outStream.close();
        

        【讨论】:

          猜你喜欢
          • 2019-08-30
          • 2011-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-10
          • 1970-01-01
          相关资源
          最近更新 更多