Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在不写入文件的情况下将字符串/字节数组作为文件发布?_Java_File_Post_Multipartform Data - Fatal编程技术网

Java 是否可以在不写入文件的情况下将字符串/字节数组作为文件发布?

Java 是否可以在不写入文件的情况下将字符串/字节数组作为文件发布?,java,file,post,multipartform-data,Java,File,Post,Multipartform Data,我有一个字符串,它是base64编码的Gzip png,是来自web服务的响应(它是一个发货标签)。我可以轻松地将其保存到一个文件中,然后将该文件发布到端点。然而,如果我能以某种方式将png附加到请求中,并将其作为文件发送,而不必保存和上传它,这似乎更为实际 第三方终结点希望进行如下文件上载: ------WebKitFormBoundary6Pa1wvNhXthHAKpp Content-Disposition: form-data; name="file"; filename="scaled

我有一个字符串,它是base64编码的Gzip png,是来自web服务的响应(它是一个发货标签)。我可以轻松地将其保存到一个文件中,然后
将该文件发布到端点。然而,如果我能以某种方式将png附加到请求中,并将其作为文件发送,而不必保存和上传它,这似乎更为实际

第三方终结点希望进行如下文件上载:

------WebKitFormBoundary6Pa1wvNhXthHAKpp
Content-Disposition: form-data; name="file"; filename="scaled.png"
Content-Type: image/png


------WebKitFormBoundary6Pa1wvNhXthHAKpp--
我知道我可以保存文件,然后发布文件

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("name", new FileBody(name));
String response = Request.Post(end).body(builder.build())
                    .execute().returnContent().toString();

有没有一种方法可以在不将png保存到文件系统的情况下获得相同的结果?

有一种方法实现了
AbstractContentBody
如果您想以完全相同的格式将其发送到远程服务器,您总是可以获得两个方面的最佳效果

//Or however you get your response from the remote server
InputStream postalImageData = serverResponse.getEntity().getContent();
//...
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("name", postalImageData);
//...
这种方法根本不需要将整个文件拉入内存,它只是将文件从一台服务器流到另一台服务器

如果您想解压缩它(但不做任何其他事情),可以使用GZIPInputStream并实现相同的结果


如果您需要操纵实体,那么您别无选择,只能将其拉入内存(除非您可以以流式方式进行操纵)。

然后您将图像保留在内存中,但当运行低时会发生什么?在网络断电的情况下,您将如何处理损坏或部分传输的图像?为什么要避免将文件写入磁盘?@Makoto这似乎是从一个web服务获取资源,对其进行处理,然后发布到另一个web服务。为什么要费心把它写到磁盘上呢?如果内存不足,它不会被丢弃,因为它是强可访问的。如果网络中断,您将通过重新获取原始资源来重新启动操作。只有当处理步骤在时间和/或CPU上代价高昂时,将中间文件写入磁盘才有意义,因为写入磁盘本身代价高昂。