错误_perm: 550 权限被拒绝

11 投票
4 回答
33817 浏览
提问于 2025-04-18 06:44

我正在学习用Python进行网页编程,目前还在看讲座和教程。

我想把一个文件上传到服务器。这是我的代码:

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文件里)。

如果我加上这一行:

 connect.cwd('/testfolder')

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

不过我仍然可以正常读取现有的文件(使用 connect.retrlines("RETR " + filename))。

我对Python和Linux都很陌生,所以我不知道自己在做什么。我需要一些帮助。

4 个回答

0

你有没有检查一下FTP服务器上的访问权限?我之前也遇到过同样的问题。这个问题发生是因为我没有权限去读取我想上传文件的那个文件夹。

1

遇到这个错误时,有几个地方可以检查一下。

  1. 检查一下你要访问的ftp服务器的当前目录,可以用connect.pwd()来查看。确保你对这个目录有写入权限。你可以手动尝试复制粘贴来确认一下。
  2. 确保你只提供文件名,而不是完整的路径。对我来说,这个是个问题。比如,应该用filename = "upload_img.jpg",而不是filename = "D:/apth/to/upload_img.jpg"。解决办法是用os.split()提取当前工作目录,然后用os.chdir()来设置当前工作目录。
5

我建议你先确认一下自己所在的位置。我之前也遇到过同样的问题,后来我发现我在一个错误的地方,实际上是在根文件夹,也就是在/public_html的上面,所以我想进入的文件夹根本不存在,而且我也没有权限存储任何文件。

你可以这样检查自己现在的位置:

print connect.pwd()

还可以查看当前文件夹里的内容:

print ftplib.FTP.dir(connect)

所以,如果你现在在根文件夹("/"),也就是在"/public_html"的上面,而你想把当前文件夹切换到"/testfolder",你需要使用:

connect.cwd('/public_html/testfolder')
7

也许这可以帮到你:

使用FTP的时候,仅仅是文件和目录的拥有者是不够的。

FTP服务和守护进程必须正确配置,才能写入和创建文件等。

举个例子,在Ubuntu系统中:
你需要编辑 /etc/vsftpd.conf

然后在这一行

;write_enable=YES

删除分号

最后重启服务:

sudo service  vsftpd restart

撰写回答