我正在使用 MultiPartEntity 执行 HttpPut,以通过 webHDFS REST API 将文件写入 HDFS。请求本身通过并给了我正确的响应,307 和 201。但是,图像具有多部分标头,如下所示,它也作为其一部分写入,它不是一个有效的图像来检索和打开。
--8DkJ3RkUHahEaNE9Ktw8NC1TFOqegjfA9Ps
内容配置:表单数据;名称=“文件”;filename="advert.jpg"
Content-Type: application/octet-stream
ÿØÿàJFIFHHÿÛC // 其余图片内容
--8DkJ3RkUHahEaNE9Ktw8NC1TFOqegjfA9Ps
从图像文件中删除多部分标题,使其成为有效图像,但我不知道如何才能避免它开始。我什至不确定我是否可以控制它,因为 webHDFS 负责实际写入文件。
这是我的代码。还有什么我应该做的吗?
final String LOCATION = "Location";
final String writeURI = "http://<ip>:50070/webhdfs/v1/user/hadoop/advert.jpg";
HttpPut put = new HttpPut(writeURI);
HttpClient client = HttpClientBuilder.create().build();
HttpResponse response = client.execute(put);
put.releaseConnection();
String redirectUri = null;
Header[] headers = response.getAllHeaders();
for(Header header : headers)
{
if(LOCATION.equalsIgnoreCase(header.getName()))
{
redirectUri = header.getValue();
}
}
HttpPut realPut = new HttpPut(redirectUri);
realPut.setEntity(buildMultiPartEntity("advert.jpg"));
HttpResponse response2 = client.execute(realPut);
private HttpEntity buildMultiPartEntity(String fileName)
{
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("file", new FileBody(new File(fileName)));
return multipartEntity.build();
}
任何帮助表示赞赏。