我正在使用MultiPartEntity的HttpPut通过webHDFS REST API将文件写入HDFS。请求本身经过并给出了正确的响应,307和201.但是,图像具有多部分头文件,如下所示,它也被写入为其一部分,并且它不是检索和打开的有效图像。通过webHDFS将图像上传到HDFS的问题REST API
--8DkJ3RkUHahEaNE9Ktw8NC1TFOqegjfA9Ps
内容处置:形状数据; NAME = “文件”;文件名=“advert.jpg”
内容类型:应用/八位字节流
ÿØÿà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();
}
任何帮助表示赞赏。
我用ByteArrayEntity来解决它。它也适用于InputStreamEntity和FileEntity。 –