You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache NiFi将SQL Server中的二进制文件流上传至AWS S3存储桶?

解决Apache NiFi上传SQL Server文件流到AWS S3的格式问题

你的流程问题出在不必要的JSON转换和重复Base64编码,导致原始二进制文件流被破坏,变成了文本格式的编码内容。以下是修正后的可行流程:

修正后的处理器流程

  • ExecuteSQL:保持查询select filename, filestream from table,但需确保JDBC驱动支持SQL Server Filestream,连接字符串添加;filestream=true参数,保证filestream列以二进制形式读取。
  • SplitAvro:将ExecuteSQL返回的批量Avro数据拆分为单个FlowFile,每个FlowFile对应一条数据库记录(一个文件的文件名+流)。
  • ExtractAvroField:配置两个提取规则:
    • 提取filename字段,设置为FlowFile的属性(比如命名为filename)。
    • 提取filestream字段,设置为FlowFile的内容(替换原有Avro内容,直接用原始二进制流)。
  • PutS3Object:在处理器配置中,将S3对象的Key设置为${filename},这样上传到S3的文件会使用数据库里的原始文件名,内容是未经过编码的原始二进制流,自然就是正确的PNG/XLSX等格式。

原流程问题分析

  1. ConvertAvroToJson:Avro本身可以直接存储二进制数据,但转成JSON时,二进制流会被自动序列化为Base64字符串(JSON不支持原生二进制),这一步已经破坏了原始文件的二进制结构。
  2. Base64EncodeContent:对已经是Base64的字符串再次编码,导致最终上传到S3的是双重Base64编码的文本,而非原始二进制文件,所以无法被识别为对应格式的文件。

内容的提问来源于stack exchange,提问作者code_hr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:15:06