必须通过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处理器:
-e313bde14db343d99c74fbb129fba9ac 内容处置:表单数据; name =“文件”; filename =“ blabla.zip”
PKh |�L��G blabla.txtK,NAB�)�&PKh |�L��G $ blabla.txt f�-.����<,����<,�PK\ 3
ExtractText
文件 = ^Content\-Disposition.*?(^PK.*)$.*?^\-\-.*?\-\-$
file_name = ^Content\-Disposition\: form\-data\; name\=\"files\"\; filename\=\"(.*?)\"
ReplaceText :用$(file)替换。*,用 file 替换流文件的全部内容。 Flowfile内容现在为:
PKh |�L��G blabla.txtK,NAB�)�&PKh |�L��G $ blabla.txt f�-.����<,����<,�PK\ 3
UnpackContent 引发以下错误:
09:43:04 CEST-所有节点-错误 UnpackContent [id = d1973e21-d051-1530-ffff-fffff1485298]无法解压StandardFlowFileRecord [uuid = 2d63555b-ff0f-4383-99d1-496df13c7a00,claim = StandardContentClaim [resourceClaim = StandardResourceClaim [id = 1530878768408-1,container = default, = 1],offset = 24932,length = 201],offset = 0,名称= 1054961836825343,size = 201]由于org.apache.nifi.processor.exception.ProcessException:从UnpackContent [id = d1973e21-d051- 1530-ffff-fffff1485298]:java.util.zip.ZipException:设置了无效的代码长度;路由到失败:UnpackContent [id = d1973e21-d051-1530-ffff-fffff1485298]引发IOException:java.util.zip.ZipException:设置了无效的代码长度
没有提取/替换
-e313bde14db343d99c74fbb129fba9ac 内容处置:表单数据; name =“文件”; filename =“ blabla.zip”
PKh |�L��G blabla.txtK,NAB�)�&PKh |�L��G $ blabla.txt f�-.����<,����<,�PK\ 3
09:04:16 CEST-所有节点-错误 UnpackContent [id = 4ffa337f-0a73-197a-9965-c1334338ebd8]无法解压StandardFlowFileRecord [uuid = 93cad6cf-e19b-4d0b-9d2d-54e38b9b8bed,claim = StandardContentClaim [resourceClaim = StandardResourceClaim [id = 1530878768408-1, = 1],offset = 21130,length = 312],offset = 0,名称= 1052634174590117,size = 312],原因是org.apache.nifi.processor.exception.ProcessException:从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
答案 0 :(得分:1)
您是否要替换ZIP文件本身中的文本?如果您要修改内容,我认为UnpackContent处理器应该位于Extract / ReplaceText之前。
答案 1 :(得分:0)
为了使java.util.zip
工作,您仅需要在流文件中压缩内容。在上面您引用了包含未压缩内容的内容:
--e313bde14db343d99c74fbb129fba9ac Content-Disposition: form-data; name="files"; filename="blabla.zip"
当zip实用程序遇到该字符串时,它将引发异常。因此,您做了合理的事情,并尝试从流文件中剥离该元数据。不幸的是,该操作破坏了zip内容,这就是您看到该错误的原因。您可以更改数据流以使用ListenHTTP处理器吗?您可以在NiFi documentation和blog post中找到有关这些处理器的详细概述,以及有关通过HTTP与NiFi通信的信息。