gpt4 book ai didi

java - 需要通过http输出流发送多个对象

转载 作者:行者123 更新时间:2023-12-02 08:11:08 25 4
gpt4 key购买 nike

我正在尝试通过 Http 输出流从 Java 客户端向 Tomcat 中运行的 servlet 发送一些非常大的文件 (>200MB)。

我的协议(protocol)当前将文件内容打包在 byte[] 中并放置一个 Map<String, Object>以及一些元数据(文件名等),每个部分都在“标准”键下( "FILENAME" -> "Foo""CONTENTS" -> byte[]"USERID" -> 1234 等) 。 Map写入 URL 连接输出流 ( urlConnection.getOutputStream() )。当文件内容较小 (<25MB) 时,此方法效果很好,但当文件大小非常大时,我会遇到 Tomcat 内存问题 ( OutOfMemoryError )。

我想发送元数据Map首先是文件内容,最后是文件数据的校验和。然后,接收方 servlet 可以从其输入流中读取元数据,然后读取字节,直到整个文件完成,最后读取校验和。

在连接 header 中发送元数据会更好吗?如果是这样,怎么办?如果我首先将元数据发送到套接字,然后发送文件内容,是否有某种标准协议(protocol)可以执行此操作?

最佳答案

您几乎肯定会想要使用 multipart POST将数据发送到服务器。然后在服务器上您可以使用类似 commons-fileupload 的内容来处理上传。

commons-fileupload 的好处是它能够理解服务器可能没有足够的内存来缓冲大文件,一旦超过一定大小就会自动将上传的数据流式传输到磁盘,这对于避免 OutOfMemoryError 类型问题。

否则你将不得不自己实现类似的东西。打包和发送数据的方式实际上并没有太大区别,只要服务器可以 1) 解析上传并 2) 将数据重定向到文件,这样它就不必在内存中缓冲整个请求立刻。如前所述,如果您使用 commons-fileupload,这两个都是免费的,所以这绝对是我推荐的。

关于java - 需要通过http输出流发送多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7402265/

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