Hi everyone,
I’m pretty new to Ruby, I’m taking courses and reading as much info as I
can, but I’m stuck on this one problem that may/may not have a simple
answer.
A quick summary of what I’m trying to accomplish:
I’ve written a simple SOAP client that interfaces with a web app used
for file transfer… It works great, however, if a file is over a
certain size it just hangs - and I know the reason why…
The webapp receives the file as a chunk, in the form of a byte array,
the great thing about Ruby is that strings are basically an arrangement
of arbitrary bytes, so I can just pass a string with the file object
into the web service and upload small files.
But I’d like to split a file into “chunks” … I know that I can do this:
def get_chunk(bytearray)
bytearray.read(61440) #read a 60kb chunk of the byte array
end
localFile = File.open(‘test.dat’)
get_chunk(localFile)
But I need to keep track of more information … The web app is looking
for an offset integer , which basically works like this:
(with a 60k chunksize)
the first request will be:
offset = 0
second request:
offset = 61440
third request:
offset = 122880
Does anyone know how I could iterate over a bytearray, keeping track of
the offset, and read 60k chunks all at the same time?
in pseudo code:
get_chunk(bytearray)
bytearray.read(61440)
offset = 0
puts bytearray.pos
=> 61440
bytearray.read(61440)
offset += 61440
puts offset
=> 61440
puts bytearray.pos
=> 122880
…
After I have the proper offset, and chunks of a bytearray - I need to
keep calling the web service method with that data until the file = eof.
I’m horrible at code blocks and iteration, if anyone has any
suggestions, it would be greatly appreciated.
Thanks,
Brian