gpt4 book ai didi

java - ByteArrayOutputStream 上传到服务器

转载 作者:行者123 更新时间:2023-12-02 00:53:34 27 4
gpt4 key购买 nike

我正在开发一个与签名板交互的小程序。签名板 API 有一个返回 BufferedImage 的函数(假设其名为 API_CALL_TO_RETURN_BUFFERED_IMAGE())。我可以编码为 jpeg 并将该图像写入文件(使用 FileOutputStream)。但是,我需要将 jpeg 编码的图像上传到服务器,而不是写入本地磁盘。我可以很好地将数据发布到服务器,并且可以很好地对图像进行编码;但我很难让这两项任务在中间相遇。

以下是代码的精简版本(省略了try-catch、函数、类):

ByteArrayOutputStream baos = new ByteArrayOutputStream();
JPEGImageEncode jie = JPEGCodec.createJPEGEncoder(baos);
jpeg.encode(API_CALL_TO_RETURN_BUFFERED_IMAGE()); // assume magic

// baos now contains jpeg data

URLConnection urlc = new URL(some_url).openConnection();
// set up urlc request headers and such
DataOutputStream dos = new DataOutputStream(urlc.getOutputStream());
dos.writeBytes(???); // ??? should be image=[the data in baos above]

// close stuff

最初,我想:

String post_data = URLEncoder.encode("image=" + new String(baos.toByteArray()), some_charset);
dos.writeBytes(post_data);

但这显然扭曲了图像。

This is what the proper (written locally) image looks like

我只能发布一个超链接,但扭曲的图像在这里:imgur.com/mbmJL.jpg

如何将 ByteArrayOutputStream 写入 DataOutputStream?

编辑/更新:

我的解决方案是进行多部分 POST。将 Content-Type header 设置为 multipart/form-data 的原因是,如此链接所示,http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4 ,说:

multipart/form-data should be used for files, non-ascii values, or binary data

就将 ByteArrayOutputStream 写入 DataOutputStream 而言,它看起来像:

dos.writeBytes(baos.toByteArray());

我确信这对于全职 Java 程序员来说是微不足道的,但我不是!

我没有使用建议的库,因为它提供的功能超出了我的需要。

最佳答案

我会使用HttpClient来简化上面的一些内容。来管理发布。这是Post教程和(如果您需要的话)Multipart Post教程。目前尚不清楚您需要哪个,但使用 HttpClient 将解决创建 HTTP 请求的结构和内容时的许多问题。

关于java - ByteArrayOutputStream 上传到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1940413/

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