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

能否通过URL直接向FTP服务器上传文件?求适用Python库

如何直接将URL指向的文件上传至FTP服务器(无需本地存储)?

没问题!你提到的需求完全可以实现——虽然ftplib默认是处理本地文件,但我们可以结合HTTP请求库实现流式上传,全程不用把文件存到本地,非常适合你用手机操作的场景。

实现思路

核心逻辑是:用requests库以流的方式获取远程URL的文件数据,然后直接把这个数据流传给ftplib的上传方法,跳过本地存储的步骤。

步骤1:准备依赖

首先确保你安装了requests库(如果没装的话):

pip install requests

步骤2:完整代码示例

import ftplib
import requests

def upload_url_to_ftp(file_url, ftp_host, ftp_user, ftp_pass, remote_filename):
    # 初始化FTP连接并登录
    try:
        ftp = ftplib.FTP(ftp_host)
        ftp.login(ftp_user, ftp_pass)
        # 开启被动模式(绝大多数公共FTP服务器都需要这个)
        ftp.set_pasv(True)
        
        # 流式获取目标URL的文件,不加载到本地内存/存储
        with requests.get(file_url, stream=True) as response:
            response.raise_for_status()  # 检查HTTP请求是否成功(比如404、500)
            # 直接将数据流上传到FTP服务器
            ftp.storbinary(f"STOR {remote_filename}", response.raw)
            print(f"✅ 文件 {remote_filename} 上传成功!")
            
        ftp.quit()
    except ftplib.all_errors as e:
        print(f"❌ FTP操作出错: {e}")
    except requests.exceptions.RequestException as e:
        print(f"❌ HTTP请求出错: {e}")

# 调用示例,替换成你的实际参数
if __name__ == "__main__":
    TARGET_FILE_URL = "https://vignette.wikia.nocookie.net/disney/images/d/db/Donald_Duck_Iconic.png"
    YOUR_FTP_HOST = "你的FTP服务器地址"
    YOUR_FTP_USER = "你的FTP用户名"
    YOUR_FTP_PASS = "你的FTP密码"
    REMOTE_SAVE_NAME = "donald_duck_icon.png"  # 上传到FTP后的文件名
    
    upload_url_to_ftp(TARGET_FILE_URL, YOUR_FTP_HOST, YOUR_FTP_USER, YOUR_FTP_PASS, REMOTE_SAVE_NAME)

关键细节说明

  • stream=True:让requests不会一次性把整个文件下载到内存,而是分块读取,既节省内存,也避免占用本地存储。
  • response.raw:这是一个类文件对象,刚好符合ftp.storbinary()的参数要求,实现了“边获取边上传”的流式传输。
  • ftp.set_pasv(True):被动模式是多数FTP服务器的要求,能避免防火墙主动连接被阻塞,一定要加上。

注意事项

  • 确保你的FTP账号有目标目录的写入权限。
  • 如果遇到HTTPS证书验证失败的问题,可以在requests.get里临时添加verify=False,但仅限测试环境使用,生产环境建议配置正确的证书。
  • 对于超大文件,这种流式处理比先下载再上传的效率高很多,尤其适合手机这类存储有限的设备。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:10:55