如何创建从FTP传输文件至Google Cloud Storage的脚本/机器人?
FTP到Google Cloud Storage文件传输脚本开发指南
一、可用开发工具与现成脚本
开发工具选项
- Python:官方库组合
ftplib(处理FTP交互)+google-cloud-storage(GCS操作),生态完善,适合复杂逻辑开发(比如增量同步、错误重试)。 - Bash/Shell:用
lftp(功能强大的FTP客户端)配合Google官方的gsutil命令行工具,适合快速搭建简单的定时同步任务。 - Go:第三方FTP库
github.com/jlaffaye/ftp+ Google官方cloud.google.com/go/storageSDK,性能优异,适合高并发、大文件传输场景。
现成可用的脚本/方案
- Python社区有大量开源实现,直接搜索“ftp to gcs python”即可找到,大多基于上述两个官方库,只需修改配置参数(FTP地址、账号、GCS桶名等)就能直接使用。
- 通过
lftp+gsutil的管道组合,无需编写完整脚本,一行命令就能实现单文件无中转传输,适合临时需求或简单批量任务。
二、是否需要本地中转?可以实现无中转传输
完全不需要本地落地文件,核心是通过流传输将FTP文件内容直接导入GCS,有两种常见实现方式:
Python流传输示例
from ftplib import FTP from google.cloud import storage import io def transfer_ftp_to_gcs(ftp_host, ftp_user, ftp_pass, remote_file, gcs_bucket, gcs_path): # 连接FTP服务器 ftp = FTP(ftp_host) ftp.login(ftp_user, ftp_pass) # 初始化内存流 file_stream = io.BytesIO() # 从FTP读取文件到内存流 ftp.retrbinary(f"RETR {remote_file}", file_stream.write) file_stream.seek(0) # 重置流指针至起始位置 # 上传流内容到GCS client = storage.Client() bucket = client.bucket(gcs_bucket) blob = bucket.blob(gcs_path) blob.upload_from_file(file_stream) # 关闭连接 ftp.quit()
该脚本将FTP文件内容直接读入内存流,再上传至GCS,全程不生成本地文件。针对大文件,可改用分块上传(blob.upload_from_file支持分块参数),避免内存占用过高。
Bash管道实现无中转
lftp -c "open ftp://${FTP_USER}:${FTP_PASS}@${FTP_HOST}; get -O - ${REMOTE_FILE}" | gsutil cp - gs://${GCS_BUCKET}/${GCS_PATH}
lftp将远程文件内容输出到标准输出,通过管道直接传递给gsutil,后者从标准输入读取内容并上传至GCS,全程无本地文件生成。
内容的提问来源于stack exchange,提问作者iandev
相关产品推荐
相关产品推荐

