我使用的是Jersey 2.28,想要编写一个客户端来上传1Gb的文件,而客户端JVM堆不能超过256Mb。
我在这里有什么选择?
我试着用下面的代码片段,但结果是OOM,因为Jersey似乎一直在尽可能多地从InputStream中读取数据。为了处理大量输入,可以指示球衣进行冲洗吗?
public Response upload(InputStream inputStream) {
Client client = ClientBuilder.newBuilder().build();
client.register(MultiPartFeature.class);
WebTarget target = client.target("http://myexample.com").path("/upload");
Invocation.Builder builder = target.request();
FormDataMultiPart form = new FormDataMultiPart();
form.bodyPart(new StreamDataBodyPart("file", inputStream, "filename.zip"));
return builder.post(Entity.entity(form, form.getMediaType()));
}
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:78)
at org.glassfish.jersey.message.internal.CommittingOutputStream.write(CommittingOutputStream.java:200)
at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$UnCloseableOutputStream.write(WriterInterceptorExecutor.java:276)
解决方案是添加:
client.property(ClientProperties.REQUEST_ENTITY_PROCESSING,
RequestEntityProcessing.CHUNKED);
ClientProperties.REQUEST_ENTITY_PROCESSING:
该属性指定连接器应如何将实体序列化到输出流。
;是否应使用缓冲或实体以分块编码进行流传输。
对于属性的编程定义,该值必须是< code>String的实例或枚举值< code > RequestEntityProcessing 。允许的值为:
缓冲
:实体将被缓冲,内容长度将在内容长度头中发送。
分
块:将使用分块编码,并对实体进行流式传输。
默认值是分块的
。但是,由于限制,一些连接器
可以定义不同的默认值(通常在接口
上无法正确支持分块编码的情况下)。此详细信息应在该特定连接器
的Javadoc中指定。例如,HttpUrlConnector
(默认的连接器
使用缓冲作为默认模式。
配置属性常量的 String 值为“jersey.config.client.request.entity.processing”。
我有一个基本的烧瓶应用程序上传图像文件到服务器,然后在网页上渲染。当多个客户端上传时,在当前的设计中,它们最终覆盖相同的静态资产。当在flask中处理来自多个客户端的上传时,最好的方法是什么?
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se
我正在尝试通过Intellij IDEA REST客户端上传文件。我选择“文件上传(多部分/表单-数据)”并选择文件发送。这个文件的参数名是什么?在我的Sprint控制器中,我使用以下代码 我也尝试了不同的名称,比如@RequestParam的“file”、“fileTosend”、“file to send”,但是Spring总是找不到MultipartFile参数。
1. 创建 Maven 工程 服务端部署完毕后,我们可以新建一个 Maven 工程使用 SOFARegistry 提供的服务。首先新建一个 Maven 工程,然后引入如下依赖: <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> <versi
发起请求 让我们从导入aiohttp模块开始: import aiohttp 好啦,我们来尝试获取一个web页面。比如我们来获取下GitHub的时间轴。 async with aiohttp.ClientSession() as session: async with session.get('https://api.github.com/events') as resp:
客户端事件通过 SetEvent 方法进行设置。 客户端事件有两个,它们分别定义为: type onErrorEvent interface { OnError(name string, err error) } type onFailswitchEvent interface { OnFailswitch(Client) } 因为 go 语言不需要显式实现接口的特点,所以这两