如何使用 ftp.storbinary 上传文件?

How do I use ftp.storbinary to upload a file?

我才刚刚开始学习Python。我正在尝试按如下方式上传文件:

import ftplib
myurl = 'ftp.example.com'
user = 'user'
password = 'password'
myfile = '/Users/mnewman/Desktop/requested.txt'
ftp = ftplib.FTP(myurl, user, password)
ftp.encoding = "utf-8"
ftp.cwd('/public_html/')
ftp.storbinary('STOR '+myfile, open(myfile, 'rb'))

但是得到如下错误:

Traceback (most recent call last):
  File "/Users/mnewman/.spyder-py3/temp.py", line 39, in <module>
    ftp.storbinary('STOR '+myfile, open(myfile, 'rb'))
  File "ftplib.pyc", line 487, in storbinary
  File "ftplib.pyc", line 382, in transfercmd
  File "ftplib.pyc", line 348, in ntransfercmd
  File "ftplib.pyc", line 275, in sendcmd
  File "ftplib.pyc", line 248, in getresp
error_perm: 553 Can't open that file: No such file or directory

“那个文件”指的是什么,我需要做什么来解决这个问题?

“该文件”是指您尝试上传到 FTP 的文件。根据您的代码,它指的是行:myfile = '/Users/mnewman/Desktop/requested.txt'。您收到此错误是因为 Python 无法在路径中找到该文件。检查它是否存在于正确的路径中。如果你想测试脚本是否有错误,你可以添加一个测试文件到你的Python脚本所在的目录,然后运行带有该文件路径的脚本。

FTP 上传的示例脚本:

import ftplib
session = ftplib.FTP('ftp.example.com','user','password')
file = open('hello.txt','rb')                  # file to send
session.storbinary('STOR hello.txt', file)     # send the file
file.close()                                    # close file and FTP
session.quit()

阅读回溯,错误在 ftp 处理来自服务器的响应的堆栈深处。 FTP 服务器消息未标准化,但从文本中可以清楚地看出 FTP 服务器无法在远程端写入文件。发生这种情况的原因有多种——可能存在权限问题(FTP 服务器进程的身份没有目标权限),写入在服务器上的沙箱设置之外,甚至它已经在另一个程序中打开了。

但在您的情况下,当“STOR”命令需要目标路径时,您使用的是完整的源文件名。根据您是否要在服务器上写入子目录,计算目标名称可能会变得复杂。如果你只想要服务器的当前工作目录,你可以

ftp.storbinary(f'STOR {os.path.split(myfile)[1]}', open(myfile, 'rb'))