[Twisted-Python] Re: Re: Resume FTP file retrieval
Richard Townsend
richard at starfighter.freeuk.com
Sun Jan 4 06:37:26 MST 2004
Hi Andrew,
Thanks very much for your suggestions.
I modified my test app to do:
size = 10*1024
deferred = ftpclient.queueStringCommand("REST %d" % size)
deferred.addCallbacks(setRestSuccess,
setRestFailure,
callbackArgs=(filename, ftpclient))
In setRestSuccess() I receive the response:
['350 Restarting at 10240. Send STORE or RETRIEVE to initiate transfer.']
Then in setRestSuccess() I do:
file_writer = FTPWriterProtocol(filename)
deferred = ftpclient.retrieveFile(filename, file_writer)
deferred.addCallbacks(downloadSuccess,
downloadFail,
callbackArgs=(file_writer,),
errbackArgs=(file_writer,))
where my protocol is defined as:
class FTPWriterProtocol(Protocol):
def __init__(self, filename):
self.file = open(filename, "ab")
def close(self):
print 'closing file'
self.file.close()
def dataReceived(self, data):
print "Received %d bytes" % len(data)
self.file.write(data)
In downloadSuccess() I receive the response:
[(1, ["150 Opening BINARY mode data connection for 'SSTEST.TXT' (522000
bytes).", '226 Transfer complete.']), (1, None), (1, None)]
However, I actually receive the complete file, and not the partial download I
expected.
Note: when I use ftplib.FTP.retrbinary() using the "rest" arg (connecting to
the same server) I do get the partial download.
Any ideas why my Twisted version is not working?
regards,
Richard Townsend
More information about the Twisted-Python
mailing list