我试图使用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)
我有一个类似的问题也得到了错误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 用户写入这些目录。
可能的解决方案:
使用该ftp.mkd(dir_name)函数创建目录,然后使用该函数更改目录ftp.cwd(dir_name),然后使用适当的 STOR 函数(storlines或storbinary)将文件写入当前目录。
就我的理解而言,STOR 命令似乎只将文件名作为参数(而不是文件路径),这就是为什么在使用 STOR 函数之前您需要确保您位于正确的“工作目录”中(请记住STOR 命令后的空格)
ftp.storbinary('STOR ' + fname, open(full_fname, 'rb'))
做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 ')。
祝你好运!
| 归档时间: |
|
| 查看次数: |
5169 次 |
| 最近记录: |