is it possible to send raw data through ftp?

D

daniel

well, I'm trying to use ftplib to upload data that received from
socket, and the application is required to restart the transfer at a
specific interval so as to generate a different target file on the
server to store subsequent data.

the problem is 'storbinary' accepts only file-like object, I have to
use socketobj.makefile() to do that, how can I stop and resume that
transfer then? the abort() generates lots of wierd and unexpected
behavior, I guess if there is a way to upload raw data buffer, the
restart action should be implemented more easily.

thanks.

daniel
 
F

Fredrik Lundh

daniel said:
well, I'm trying to use ftplib to upload data that received from
socket, and the application is required to restart the transfer at a
specific interval so as to generate a different target file on the
server to store subsequent data.
the problem is 'storbinary' accepts only file-like object

"storbinary" works with anything that has a "read" method that takes a
buffer size, so you can wrap the source stream in something like:

##
# File wrapper that reads no more than 'bytes' data from a stream. Sets
# the 'eof' attribute to true if the stream ends.

class FileWrapper:
def __init__(self, fp, bytes):
self.fp = fp
self.bytes = bytes
self.eof = False
def read(self, bufsize):
if self.bytes <= 0:
return ""
data = self.fp.read(min(bufsize, self.bytes))
if not data:
self.eof = True
self.bytes -= len(data)
return data

source = open(...)

while 1:
cmd = "STOR " + generate_file_name()
f = FileWrapper(source, 1000000)
ftp.storbinary(cmd, f)
if f.eof:
break

</F>
 
D

daniel

buffer size, so you can wrap the source stream in something like:

##
# File wrapper that reads no more than 'bytes' data from a stream. Sets
# the 'eof' attribute to true if the stream ends.

class FileWrapper:
def __init__(self, fp, bytes):
self.fp = fp
self.bytes = bytes
self.eof = False
def read(self, bufsize):
if self.bytes <= 0:
return ""
data = self.fp.read(min(bufsize, self.bytes))
if not data:
self.eof = True
self.bytes -= len(data)
return data

source = open(...)

while 1:
cmd = "STOR " + generate_file_name()
f = FileWrapper(source, 1000000)
ftp.storbinary(cmd, f)
if f.eof:
break

</F>
I'm trying to understand your code, thank you so much for the help.

daniel
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,432
Messages
2,571,682
Members
48,796
Latest member
Greg L.

Latest Threads

Top