错误_perm: 550 权限被拒绝
我正在学习用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
遇到这个错误时,有几个地方可以检查一下。
- 检查一下你要访问的
ftp服务器
的当前目录,可以用connect.pwd()
来查看。确保你对这个目录有写入权限。你可以手动尝试复制粘贴来确认一下。 - 确保你只提供文件名,而不是完整的路径。对我来说,这个是个问题。比如,应该用
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