gpt4 book ai didi

hadoop - 通过 webHDFS REST API 将图像上传到 HDFS 的问题

转载 作者:可可西里 更新时间:2023-11-01 15:15:40 26 4
gpt4 key购买 nike

我正在使用 MultiPartEntity 执行 HttpPut,以通过 webHDFS REST API 将文件写入 HDFS。请求本身通过并给了我正确的响应,307 和 201。但是图像有多个部分的标题也作为它的一部分写入,如下所示,它不是一个有效的图像来检索和打开。

--8DkJ3RkUHahEaNE9Ktw8NC1TFOqegjfA9Ps
Content-Disposition:表单数据;名称="file";文件名="广告.jpg"
内容类型:application/octet-stream

ÿØÿàJFIFHHÿÛC//其余图片内容
--8DkJ3RkUHahEaNE9Ktw8NC1TFOqegjfA9Ps

从图像文件中删除多部分 header ,使其成为有效图像,但我不确定如何才能避免它开始。我什至不确定我是否可以控制它,因为 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();
}

感谢任何帮助。

最佳答案

我在 python 请求中遇到了同样的问题。我最终解决它的方法是在发送之前将图像读入内存。并使用一步调用 webhdfs api 而不是两步。希望这会有所帮助。

host_url = current_app.config.get('HDFS_URL', '')
adx_img_path = current_app.config.get('ADX_CUSTOMER_IMAGE', '')
real_path = adx_img_path + remotefile
hdfs_username = current_app.config.get('HDFS_USERNAME', 'xdisk')
parameters = '?user.name=' + hdfs_username + '&op=CREATE&data=true'
img = open(localfile, 'rb').read()
url = host_url + real_path + parameters
r = requests.put(url, data=img, headers={"Content-Type": "application/octet-stream"})

似乎通过将图像读取为二进制/字节,怪异的 header 将不会添加到文件 header 中。对于您正在使用的 HttpClient,我建议您尝试 InputStreamBodyByteArrayBody

关于hadoop - 通过 webHDFS REST API 将图像上传到 HDFS 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23248890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com