将压缩的文本文件发布到apache nifi

时间:2018-07-09 14:06:30

标签: post zip apache-nifi

必须通过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 (端点/端点上的过滤器) 流文件的内容为:
      

    -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:设置了无效的代码长度


没有提取/替换

  • HandleHttpRequest
  • RouteOnAttribute (端点/端点上的过滤器) 流文件的内容为:
      

    -e313bde14db343d99c74fbb129fba9ac   内容处置:表单数据; name =“文件”; filename =“ blabla.zip”

         

    PKh |�L��G   blabla.txtK,NAB�)�&PKh |�L��G   $ blabla.txt   f�-.����<,����<,�PK\ 3

  • UnpackContent 会产生以下错误:
      

    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

2 个答案:

答案 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 documentationblog post中找到有关这些处理器的详细概述,以及有关通过HTTP与NiFi通信的信息。