【发布时间】:2018-07-09 14:06:29
【问题描述】:
必须通过 HTTP 或 HTTPS 将 zip 格式的压缩文本文件发送到 apache nifi。在那里它必须被解压缩并存储在 HDFS 上。迄今为止的努力都没有结果。
测试文件是压缩文本文件blabla.txt
Python 帖子
import requests
requests.post('http://example.com/endpoint',
files={'files': open('blabla.zip', 'rb')})
Nifi 进程
我最好的尝试是使用以下 Nifi 处理器:
- HandleHttpRequest
-
RouteOnAttribute(在端点/endpoint 上过滤)
流文件的内容是:
--e313bde14db343d99c74fbb129fba9ac 内容处置:表单数据;名称="文件";文件名="blabla.zip"
PKh|�L��G blabla.txtK,NAB�)�&PKh|�L��G $ blabla.txt f�-.����
-
提取文本
文件 =
^Content\-Disposition.*?(^PK.*)$.*?^\-\-.*?\-\-$文件名 =^Content\-Disposition\: form\-data\; name\=\"files\"\; filename\=\"(.*?)\" -
ReplaceText:将 .* 替换为 $(file) 以将流文件的全部内容替换为 file。流文件内容现在是:
PKh|�L��G blabla.txtK,NAB�)�&PKh|�L��G $ blabla.txt f�-.����
-
UnpackContent 抛出以下错误:
09:43:04 CEST - 所有节点 - 错误 UnpackContent[id=d1973e21-d051-1530-ffff-fffff1485298] 无法解压 StandardFlowFileRecord[uuid=2d63555b-ff0f-4383-99d1-496df13c7a00,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=15308=78768节] =1], offset=24932, length=201],offset=0,name=1054961836825343,size=201] 由于 org.apache.nifi.processor.exception.ProcessException: IOException 从 UnpackContent[id=d1973e21-d051- 1530-ffff-fffff1485298]:java.util.zip.ZipException:设置的代码长度无效;路由失败:从 UnpackContent [id=d1973e21-d051-1530-ffff-fffff1485298] 引发的 IOException:java.util.zip.ZipException:设置的代码长度无效
不提取/替换
- HandleHttpRequest
-
RouteOnAttribute(在端点/endpoint 上过滤)
流文件的内容是:
--e313bde14db343d99c74fbb129fba9ac 内容处置:表单数据;名称="文件";文件名="blabla.zip"
PKh|�L��G blabla.txtK,NAB�)�&PKh|�L��G $ blabla.txt f�-.����
-
UnpackContent 产生以下错误:
09:04:16 CEST - 所有节点 - 错误 UnpackContent[id=4ffa337f-0a73-197a-9965-c1334338ebd8] 无法解压 StandardFlowFileRecord[uuid=93cad6cf-e19b-4d0b-9d2d-54e38b9b8bed,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1530878764]容器=1], offset=21130, length=312],offset=0,name=1052634174590117,size=312] 由于 org.apache.nifi.processor.exception.ProcessException: IOException 从 UnpackContent[id=4ffa337f-0a73- 197a-9965-c1334338ebd8]:java.util.zip.ZipException:意外记录签名:0X65632D2D;路由失败:从 UnpackContent [id=4ffa337f-0a73-197a-9965-c1334338ebd8] 引发的 IOException:java.util.zip.ZipException:意外记录签名:0X65632D2D
【问题讨论】:
-
你知道压缩后payload的文件编码是什么吗?
-
如果我在记事本 ++ 中打开本地 zip 文件,则表示它是
ANSI文件格式。如果我下载 zip(解压失败),它会显示UTF-8。 -
我怀疑除了您看到的文件处理问题之外还有编码问题。文件是否从 Windows 机器移动到基于 Linux 的服务器,最后又回到 Windows 机器?
-
文件从 windows 机器移动到 linux 机器。我可以在文件内容中看到它们与我本地机器上的文件不同。我尝试使用 NiFi 的功能来更改编码,但我无法找到 ANSI。
-
我在发送压缩文件之前通过base64编码“解决”了这个问题。
标签: post zip apache-nifi