![](/img/trans.png)
[英]HttpEntity<String> request = new HttpEntity<String>( ); How do I mock this in java
[英]How to remove request header from HttpEntity while uploading file
我正在尝试通过 REST API 向 mft 服务器发送一些消息,并且我正在使用MultipartHttpEntityBuilder
来构建消息,但与原始消息一起,一些不需要的标头和其他数据也被附加了。 我发现了类似的问题MultipartEntityBuilder: Omit Content-Type 和 Content-Transfer ,但它很有帮助。
我的代码片段:
HttpPut putRequest = new HttpPut(MFTSERVER_REST_LINK);
MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addBinaryBody("something","<head><content>xyz</content></head>".getBytes(), ContentType.APPLICATION_XML,"fileName");
HttpEntity httpEntity = builder.build();
putRequest.setEntity(httpEntity) ;
httpClient.execute(putRequest);
要写入文件的预期内容:
<head><content>xyz</content></head>
但是,实际上写入文件:
--p13fxV0SO5Y6zSxYnGPJlfGPgX8snL
Content-Disposition: form-data; name="something"; filename="fileName"
Content-Type: application/xml; charset=ISO-8859-1
<head><content>xyz</content></head>
--p13fxV0SO5Y6zSxYnGPJlfGPgX8snL--
有人可以帮我解决这个问题吗?
如果您要在帖子正文中写入Byte
数据。 然后,您应该使用ByteArrayEntity
而不是MultipartEntityBuilder
。 因为,在AbstractMultipartForm
使用doWriteTo
方法。 您无法删除或跳过要写入文件的不需要的标头。
void doWriteTo(
final OutputStream out,
final boolean writeContent) throws IOException {
final ByteArrayBuffer boundary = encode(this.charset, getBoundary());
for (final FormBodyPart part: getBodyParts()) {
writeBytes(TWO_DASHES, out);
writeBytes(boundary, out);
writeBytes(CR_LF, out);
formatMultipartHeader(part, out);
writeBytes(CR_LF, out);
if (writeContent) {
part.getBody().writeTo(out);
}
writeBytes(CR_LF, out);
}
writeBytes(TWO_DASHES, out);
writeBytes(boundary, out);
writeBytes(TWO_DASHES, out);
writeBytes(CR_LF, out);
}
您可以看到,写入输出流的元素列表依次是边界、标题、正文和边界。 所以,如果你想用字节写一些内容。 然后,您应该使用ByteArrayEntity
。
byte[] b = "This is hello".getBytes("UTF-8");
putRequest.setEntity(new ByteArrayEntity(b));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.