java - ByteArrayOutputStream 上传到服务器

标签 java http jpeg

我正在开发一个与签名板交互的小程序。签名板 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/

相关文章:

java - 将返回的变量传递给其他方法

java - 如何创建具有指定宽度和显示所有文本所需的尽可能小的高度的 JTextArea?

java - 在 Netbeans 中创建持久性单元 - 需要 JNDI 名称

rest - 当端点被 feature-flag/feature-toggle 禁用时,您使用什么 HTTP 状态代码?

png - 在另一张 .jpg 图像上显示一个 .png 图像

java - jHipster:8080 和 9000 端口上的不同版本

android - 如何使用 http 将 Android 中的文件从移动设备发送到服务器?

http - 无法分配请求的地址 : make_sock: could not bind to address

http - 创建我自己的 MJPEG 流

java - 将PDF字节数组转换为jpg图像(JAVA项目)