错误_权限:550 权限被拒绝。

11

我正在学习使用Python进行Web编程,目前还在基础课程/教程中。

我正试图将文件上传到服务器。这是我的代码:

import ftplib
import sys

filename = sys.argv[1]
connect = ftplib.FTP("***.**.***.**")
connect.login("testuser","pass")
file = open(filename, "rb")
connect.storbinary("STOR " + filename, file)
connect.quit()

这是我遇到的错误:

File "C:\Users\test\putfile.py", line 8, in <module>
   connect.storbinary("STOR " + filename, file)
File "C:\Python27\lib\ftplib.py", line 471, in storbinary
   conn = self.transfercmd(cmd, rest)
File "C:\Python27\lib\ftplib.py", line 376, in transfercmd
   return self.ntransfercmd(cmd, rest)[0]
 File "C:\Python27\lib\ftplib.py", line 339, in ntransfercmd
   resp = self.sendcmd(cmd)
 File "C:\Python27\lib\ftplib.py", line 249, in sendcmd
   return self.getresp()
 File "C:\Python27\lib\ftplib.py", line 224, in getresp
   raise error_perm, resp
 ftplib.error_perm: 550 Permission denied.

由于该文件夹是testuser所拥有的,并且他已被添加到sudoer文件中,具有root权限,因此testuser应该拥有编写文件的权限。

如果我添加以下行,则情况相同:

 connect.cwd('/testfolder')

我会收到错误信息 error_perm: 550,无法更改目录。

但是我仍然可以通过 connect.retrlines("RETR " + filename) 命令顺利读取现有文件。

由于我对 Python 和 Linux 都不太熟悉,因此并不清楚自己在做些什么。我需要一些帮助。

4个回答

7
也许这可以帮助你:
仅拥有文件和目录的所有权是不足够的,必须正确配置FTP服务和守护程序才能编写和创建文件等。
例如,在Ubuntu中: 编辑/etc/vsftpd.conf
并在行中:
;write_enable=YES

删除分号

最后重新启动服务:

sudo service  vsftpd restart

5
我会检查你当前所在的位置是否正确。我曾遇到同样的问题,后来发现我所在的位置与我原本打算的不同。我位于根目录,上面是/public_html文件夹,因此我没有进入想要进入的文件夹的权限,也无法存储任何文件。
你可以通过以下方式检查你当前所在的位置:
print connect.pwd()

并查看当前目录中的内容:

print ftplib.FTP.dir(connect)

因此,如果您在根目录(“/”)上面的“/public_html”,并且您想要将当前目录更改为“/testfolder”,则需要使用:

connect.cwd('/public_html/testfolder')

1
不要将变量传递给retrbinary()storbinary(),其中包含您将在本地计算机上下载文件的文件路径,而是传递一个仅包含服务器上文件名称的变量,就像我所做的那样。 :p - binarysubstrate

0

你检查过FTP服务器的访问权限了吗?我之前遇到过同样的问题。这个问题是因为我没有读取我想要上传文件的文件夹的权限。


0

如果遇到此错误,有几件事情可以检查。

  1. 使用 connect.pwd() 检查您正在尝试访问的 ftp 服务器 的当前目录。确保您对此目录具有写访问权限。您可以尝试手动复制粘贴以验证相同。
  2. 确保仅提供文件名而不是完整路径。对我来说,这会导致问题。例如,filename = "upload_img.jpg" 而不是 filename = "D:/apth/to/upload_img.jpg"。解决方法是使用 os.split() 提取 CWD,然后使用 os.chdir() 设置 CWD。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接