使用ftplib的storbinary方法无法传输HTML文件的问题求助
解决FTP传输HTML文件失败的问题
试试切换到ASCII模式传输
storbinary是用来传二进制文件的,但HTML本质是文本文件,有些FTP服务器对文本文件的传输模式有要求,硬用二进制可能触发校验失败。换storlines试试:
import ftplib ftp = ftplib.FTP("ftpupload.net") ftp.login("username", "password") ftpPath = '/test/' ftp.cwd(ftpPath) # 用ASCII模式的storlines传输HTML文件 with open(r'C:\Users\whybo\Desktop\index.html', 'r', encoding='utf-8') as f: ftp.storlines('STOR index.html', f)
检查FTP服务器的权限和过滤规则
- 确认目标目录
/test/能不能创建HTML文件,有些服务器会限制特定扩展名的文件上传(比如防恶意脚本) - 看看服务器端有没有防火墙或安全软件拦截了HTML文件的传输请求
加异常捕获搞清楚具体错误
你现在的代码没做错误处理,根本不知道为啥失败,加个异常捕获看详细信息:
import ftplib try: ftp = ftplib.FTP("ftpupload.net") ftp.login("username", "password") ftpPath = '/test/' ftp.cwd(ftpPath) with open(r'C:\Users\whybo\Desktop\index.html', 'rb') as f: ftp.storbinary('STOR index.html', f) print("文件上传成功") except ftplib.all_errors as e: print(f"上传失败,错误信息: {e}") finally: ftp.quit()
拿到错误信息就能精准定位问题,比如是权限不够、文件找不到还是服务器不收这种类型的文件。
开启被动模式试试
有些FTP服务器强制要求用被动模式,显式打开:
import ftplib ftp = ftplib.FTP("ftpupload.net") ftp.login("username", "password") ftp.set_pasv(True) # 开启被动模式 ftpPath = '/test/' ftp.cwd(ftpPath) with open(r'C:\Users\whybo\Desktop\index.html', 'rb') as f: ftp.storbinary('STOR index.html', f) ftp.quit()
内容的提问来源于stack exchange,提问作者Fin Elliott
相关产品推荐
相关产品推荐

