如何使用Python无需本地下载直接将网络图片保存到FTP服务器
错误原因
你的代码核心问题是误用了open()函数:open(rq, 'rb')的第一个参数要求传入本地文件路径,你实际传入的是requests.get()返回的图片二进制字节数据,系统尝试把字节数据解码为UTF-8格式的文件名时失败,才抛出了该编码错误,和你调整编码参数的操作完全无关,属于逻辑方向错误。
修正方案
要实现图片不落地本地直接上传到FTP,只需要用io.BytesIO把请求到的二进制内容包装成类文件对象,直接传给storbinary方法即可,无需调用open()读取本地文件。
完整可运行代码
import requests from ftplib import FTP as tp from io import BytesIO url = "https://im0-tub-com.yandex.net/i?id=5fda7c40cfa53d048d169908bbbd7cb6&n=13" # 请求图片二进制内容 img_content = requests.get(url).content # 连接FTP ftp = tp('host', 'username', 'password') ftp.cwd("www") # 用BytesIO包装二进制内容为类文件对象 with BytesIO(img_content) as f: ftp.storbinary("STOR name.webp", f) ftp.quit()
注意事项
- 可以给
requests.get()添加timeout参数避免请求超时卡住 - 建议增加FTP连接、上传的异常捕获逻辑,避免程序意外崩溃
- 如果图片体积很大,可以调整为流式请求避免内存占用过高
内容的提问来源于stack exchange,提问作者user15347905
相关产品推荐
相关产品推荐

