gpt4 book ai didi

java - 如何在 HTTP 响应主体(使用 Spark)中发送 QR 码的 PNG?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:03 24 4
gpt4 key购买 nike

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

为了生成二维码,我使用了 ZXing。我已经通过使用带有 MatrixToImageWriter.writeToStream(...)FileOutputStream 来测试转换部分。这就像一个魅力。

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

使用当前的解决方案,我在使用 Firefox 执行 GET 请求时得到 The image "http://localhost:4567/qrcode"cannot be displayed because it contains errors

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

最佳答案

刚刚经历了这个。您可以使用以下代码编写任何文件/二进制数据/输出流:

byte[] bytes = Files.readAllBytes(Paths.get(filePath));         
HttpServletResponse raw = res.raw();

raw.getOutputStream().write(bytes);
raw.getOutputStream().flush();
raw.getOutputStream().close();


return res.raw();

关于java - 如何在 HTTP 响应主体(使用 Spark)中发送 QR 码的 PNG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24099147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com