TomNg
TomNg

Reputation: 1997

python - use pyftpdlib for file transfer

I am working on file transfer in python. I've been searching a lot but still haven't found a simple demo of a working ftp client-server using pyftpdlib. I think this library is very useful but I don't know how to start using it.

Thank you so much for any help!

EDIT: OK, I followed the tutorial. My goal is to be able to send/receive files within local machine first.

I run the basic_ftpd.py and get this:

[I 14-07-09 15:08:27] >>> starting FTP server on 127.0.0.1:2121, pid=7000 <<<
[I 14-07-09 15:08:27] poller: <class 'pyftpdlib.ioloop.Select'>
[I 14-07-09 15:08:27] masquerade (NAT) address: None
[I 14-07-09 15:08:27] passive ports: None

Then I run winnt_ftpd.py and I get error:

Traceback (most recent call last):
  File "***\lib\winnt_ftpd.py", line 41, in <module>
    from pyftpdlib.authorizers import WindowsAuthorizer
ImportError: cannot import name WindowsAuthorizer

Let's assume that I want to send some file in C:/share and in local address I think it should be 127.0.0.1:2121 or localhost:2121. Then from client side I want to get directory listing:

import ftplib

ftp = ftplib.FTP("127.0.0.1:2121")
ftp.login("user", "12345")

data = []

ftp.dir(data.append)

ftp.quit()

for line in data:
    print "-", line

But this is not working, I get following error:

Traceback (most recent call last):
  File "C:\Users\***\src\client1.py", line 8, in <module>
    ftp = ftplib.FTP("127.0.0.1:2121")
  File "C:\Python27\lib\ftplib.py", line 117, in __init__
    self.connect(host)
  File "C:\Python27\lib\ftplib.py", line 132, in connect
    self.sock = socket.create_connection((self.host, self.port), self.timeout)
  File "C:\Python27\lib\socket.py", line 551, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 11004] getaddrinfo failed

EDIT: I changed

ftp = ftplib.FTP("127.0.0.1:2121")

to

ftp = ftplib.FTP("127.0.0.1")

Then I get this error:

socket.error: [Errno 10061] No connection could be made because the target machine actively refused it

Any suggestion?

Upvotes: 1

Views: 5784

Answers (1)

shipperizer
shipperizer

Reputation: 1669

What about trying this:

conn = ftplib.FTP() conn.connect('127.0.0.1', 2121) conn.login('user','12345')

the FTP() constructor accept only the hostname or IP address, instead if you pass nothing and then you configure all with connect() you can pass a tuple with (IP, port) This should make the trick

Upvotes: 1

Related Questions