Python ftplib错误553

时间:2015-07-24 14:26:30

标签: 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'))

3 个答案:

答案 0 :(得分:4)

我遇到类似的问题也会收到错误553: Could not create file。什么(更新:部分)为我解决了这条线:

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

为:

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

请注意,在'STOR'之后有一个 space ,我在文件名之前添加了正斜杠('/'),表示我想要存储在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'))

答案 1 :(得分:0)

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

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

因为听起来你在远程机器上运行ftp服务器(vsftpd),最简单的解决方案可能是:

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

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

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

祝你好运!

答案 2 :(得分:0)

我确信在这一点上你找到了一个解决方案,但我在寻找解决方案时偶然发现了这个问题。我最终使用了以下内容:

# Handles FTP transfer to server
def upload(ftp, dir, file):
    # Test if directory exists. If not, create it
    if dir.split('/')[-1] not in ftp.nlst('/'.join(dir.split('/')[:-1])):
        print("Creating directory: " + dir)
        ftp.mkd(dir)
    # Check if file extension is text format
    ext = path.splitext(file)[1]
    if ext.lower() in (".txt", ".htm", ".html"):
        ftp.storlines("STOR " + dir + '/' + file, open(dir + '/' + file, "rb"))
    else:
        ftp.storbinary("STOR " + dir + '/' + file, open(dir + '/' + file, "rb"), 1024)