Python ftplib错误553

use*_*643 5 python ftp

我试图使用python连接到服务器并将我的本地目录中的一些文件上传到/ var/www/html但每次我尝试这样做时都会收到此错误:

错误:ftplib.error_perm:553无法创建文件.

我已经在路径上做了一个chown和一个chmod -R 777.我正在使用vsftpd并已启用写入启用.有没有人有任何想法?

码:

ftp = FTP('ipaddress')
ftp.login(user='user', passwd = 'user')
ftp.cwd('/var/www/html')
for root, dirs, files in os.walk(path):
    for fname in files:
        full_fname = os.path.join(root, fname)
        ftp.storbinary('STOR' + fname, open(full_fname, 'rb'))
Run Code Online (Sandbox Code Playgroud)

Irv*_* H. 6

我有一个类似的问题也得到了错误553: Could not create file。什么(更新:部分)为我解决了这个问题,将这一行从:

ftp.storbinary('STOR' + fname, open(full_fname, 'rb'))

到:

ftp.storbinary('STOR ' + '/' + fname, open(full_fname, 'rb'))

请注意,在 'STOR' 之后有一个空格,我在文件名之前添加了一个正斜杠 ('/') 以表明我希望该文件存储在 FTP 根目录中

更新: [2016-06-03] 其实这只是解决了部分问题。后来我意识到这是一个权限问题。FTP 根目录允许 FTP 用户写入,但我使用另一个用户在该目录中手动创建了文件夹,因此新目录不允许 FTP 用户写入这些目录。

可能的解决方案:

  1. 更改目录的权限,使 FTP 用户成为这些目录的所有者,或者至少能够读取和写入这些目录。
  2. 使用该ftp.mkd(dir_name)函数创建目录,然后使用该函数更改目录ftp.cwd(dir_name),然后使用适当的 STOR 函数(storlinesstorbinary)将文件写入当前目录。

    • 就我的理解而言,STOR 命令似乎只将文件名作为参数(而不是文件路径),这就是为什么在使用 STOR 函数之前您需要确保您位于正确的“工作目录”中(请记住STOR 命令后的空格)

      ftp.storbinary('STOR ' + fname, open(full_fname, 'rb'))


And*_*iak 0

path == '/var/www/html'?那是本地路径。您需要一个 FTP 路径。

本地路径/var/www/html通常无法通过 FTP 访问。当您连接到 FTP 服务器时,呈现给您的文件系统通常从您的用户的主目录开始/home/user

因为听起来您正在远程计算机上运行 ftp 服务器 (vsftpd),所以最简单的解决方案可能是这样的:

user@server:~$ ln -s /var/www/html /home/user/html

然后您可以调用ftp.cwd('html'), 和ftp.nlst()来获取远程目录列表,并从那里导航。

另外,不要忘记在字符串中添加空格字符'STOR'(应该是'STOR ')。

祝你好运!