有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将我刚刚生成的QRCode图像文件保存到服务器?

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>
}

下面是我用来生成QRCode的代码。我使用outputStream向浏览器显示QRCode。但我如何才能将QRCode保存为服务器上的图像文件,并使用标记将其显示在另一个html文件中呢? 我使用iText库在这里生成QrCode


共 (2) 个答案

  1. # 1 楼答案

    保存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();
    
  2. # 2 楼答案

    如果保存是可选的,但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?