是否可以将 POST 一个 string/byte 数组作为文件而不写入文件?
Is it possible to POST a string/byte array as a file without writing a file?
我有一个字符串,它是 base64 编码的 gzipped png,它是来自 Web 服务的响应(它是一个运输标签)。我可以轻松地将它保存到文件中,然后 POST
将文件保存到端点。但是,如果我能以某种方式将 png 附加到请求并 将其作为文件发送 而不是保存和上传它似乎更实用。
第 3 方端点需要像这样的文件上传:
------WebKitFormBoundary6Pa1wvNhXthHAKpp
Content-Disposition: form-data; name="file"; filename="scaled.png"
Content-Type: image/png
------WebKitFormBoundary6Pa1wvNhXthHAKpp--
我知道我可以保存文件然后 post 文件
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("name", new FileBody(name));
String response = Request.Post(end).body(builder.build())
.execute().returnContent().toString();
有没有办法在不将 png 保存到文件系统的情况下获得相同的结果?
ByteArrayBody 实现了 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 并获得相同的结果。
如果您需要操作实体,那么您别无选择,只能将其拉入内存(除非您可以以流方式进行操作)。
我有一个字符串,它是 base64 编码的 gzipped png,它是来自 Web 服务的响应(它是一个运输标签)。我可以轻松地将它保存到文件中,然后 POST
将文件保存到端点。但是,如果我能以某种方式将 png 附加到请求并 将其作为文件发送 而不是保存和上传它似乎更实用。
第 3 方端点需要像这样的文件上传:
------WebKitFormBoundary6Pa1wvNhXthHAKpp
Content-Disposition: form-data; name="file"; filename="scaled.png"
Content-Type: image/png
------WebKitFormBoundary6Pa1wvNhXthHAKpp--
我知道我可以保存文件然后 post 文件
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("name", new FileBody(name));
String response = Request.Post(end).body(builder.build())
.execute().returnContent().toString();
有没有办法在不将 png 保存到文件系统的情况下获得相同的结果?
ByteArrayBody 实现了 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 并获得相同的结果。
如果您需要操作实体,那么您别无选择,只能将其拉入内存(除非您可以以流方式进行操作)。