Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python ftplib error 553

Tags:

python

ftp

I am attempting to use python to connect to a server and upload some files from my local directory to /var/www/html but every time I try to do this I get this error:

Error: ftplib.error_perm: 553 Could not create file.

I have already did a chown and a chmod -R 777 to the path. I am using vsftpd and already set write enabled. Does anyone have any ideas?

Code:

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'))
like image 909
user3702643 Avatar asked Jul 24 '15 14:07

user3702643


1 Answers

I had a similar problem also getting the error 553: Could not create file. What (update: partially) solved it for me was changing this line from:

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

to:

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

Notice that there is a space just after the 'STOR ' and I added a forward slash ('/') just before the filename to indicate that i'd like the file stored in the FTP root directory

UPDATE: [2016-06-03] Actually this only solved part of the problem. I realized later that it was a permissions problem. The FTP root directory allowed writing by the FTP user but i had manually created folders within this directory using another user thus the new directories did not allow the FTP user to write to these directories.

Possible solutions:

  1. Change the permissions on the directories such that the FTP user is the owner of these directories, or is at least able to read and write to them.
  2. Create the directories using the ftp.mkd(dir_name) function, then change directory using the ftp.cwd(dir_name) function and then use the appropriate STOR function (storlines or storbinary) to write the file to the current directory.

    • As far as my understanding goes, the STOR command seems to only take a filename as a parameter (not a file path), that's why you need to make sure you are in the correct 'working directory' before using the STOR function (Remember the space after the STOR command)

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

like image 89
Irvin H. Avatar answered Nov 10 '22 23:11

Irvin H.