java-如何在HTTP响应正文中(通过Spark)发送QR码的PNG?

我想生成一个QR码图像,将其转换为PNG并将其作为HTTP响应返回给客户端.

为了生成QR码,我使用ZXing.我已经通过使用带有MatrixToImageWriter.writeToStream(…)的FileOutputStream进行编写来测试转换部分.就像魅力一样.

我当前使用的Web框架是Spark(版本1.1.1). handle(…)方法的返回值设置为响应主体.我在这里做错了什么?

使用当前解决方案,我得到图像“ http:// localhost:4567 / qrcode”无法显示,因为在Firefox中执行GET请求时它包含错误.

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;

import static spark.Spark.get;
import spark.Request;
import spark.Response;
import spark.Route;

import com.google.gson.Gson;

import com.google.common.io.BaseEncoding;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class App {
    public static void main(String[] args) {
        get(new Route("/qrcode") {

            @Override
            public Object handle(Request request, Response response) {
                // Test data
                QrData data = new QrData("test");

                // Data is wrapped in JSON
                String json = new Gson().toJson(data);

                // Transform JSON to QR-code PNG byte string
                String qrString = "";
                try {
                    qrString = generatePngQrCode(json);
                } catch (Exception e) {
                    e.printStackTrace();
                } 

                // Set response parameters
                response.type("image/png");
                response.status(200);

                // Return response body
                return qrString;
            }
        });
    }

    public String generatePngQrCode(String content) throws Exception {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        // ZXing QR-code encoding
        BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, 400, 400);

        // Convert to PNG image and write to stream
        MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream);

        // Encode to Base 64  
        return BaseEncoding.base64().encode(outputStream.toByteArray());
    }
}
最佳答案
使用response.getRaw获得应用于将PNG写入的OutputStream(使用MatrixToImageWriter).

转载注明原文:java-如何在HTTP响应正文中(通过Spark)发送QR码的PNG? - 代码日志