Hi Sachith,

I would define a thrift struct that has metadata about the file, followed by a 
member of type list<byte> that stores the file data. I would also define the 
metadata so it can support transmitting the file in chunks (data that says this 
is chunk m of n, for instance), where each chunk is sent in a separate message 
to the server. I would also include some unique cookie value so you can 
differentiate between two client processes sending the same file.

On the client side, figure out how many chunks you need to send the file, then 
split the file data up between that many instances of your Thrift class. 
Iterate over the Thrift classes and send each to the server.

On the server side, receive the sendFile messages. Use the unique cookie from 
within the structure to sort the structures you receive into a separate bin for 
each file you are receiving (std::map<std::string, 
std::vector<YourThriftStructType *> > would probably work). When you have 
received all n chunks for a file (which you can tell because of the metadata), 
then use the collected Thrift structures to reconstitute the file on the server 
side. The server method can return a value that tells whether or not it thinks 
the transmission has completed. This approach lets you field send messages from 
many clients simultaneously with a single server instance.

That's my first cut. It probably requires some refinement. ;-)

- Rush


On Mar 5, 2014, at 1:45 PM, Sachith Withana wrote:

> Thanks Henrique and Jens,
> 
> Ideally we'd like to support multiple Gigabytes of data.
> As you said, we will potentially end up having a server to do file
> uploading and downloading through URLs for Big files.
> 
> But we'd like to support small file (~10MB) uploads using the Thrift
> interface at least for now.
> 
> What would be the best approach in achieving that?
> 
> 
> On Wed, Mar 5, 2014 at 4:32 PM, Jens Geyer <jensge...@hotmail.com> wrote:
> 
>> [...] faster to send a URL and download it separately, [...]
>>> 
>> 
>> Ack, I was about to write the same.
>> 
>> 
>> 
>> -----Ursprüngliche Nachricht----- From: Henrique Mendonça
>> Sent: Wednesday, March 5, 2014 10:24 PM
>> To: dev@thrift.apache.org
>> Subject: Re: File Upload through thrift
>> 
>> 
>> Hi,
>> You can do this, how big are your files? You might find that some
>> implementations do have a size limit, not sure about Java, though.
>> Anyway, is generally faster to send a URL and download it separately, if it
>> fits you...
>> 
>> 
>> On 5 March 2014 20:56, Sachith Withana <swsach...@gmail.com> wrote:
>> 
>> I'm planning on converting the file into binary type and then do the
>>> transfer to the server.
>>> 
>>> What are the possible drawbacks of using this?
>>> 
>>> This feature is for Apache Airavata. We are dealing with multiple language
>>> clients and a main Java Server.
>>> We have to upload ( and download) large files too.
>>> 
>>> Thanks.
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Wed, Mar 5, 2014 at 1:47 PM, Sachith Withana <swsach...@gmail.com>
>>> wrote:
>>> 
>>>> Hi all,
>>>> 
>>>> I need to transfer files between the Thrift clients and Servers.
>>>> There can be large files to be transferred.
>>>> 
>>>> Can someone please suggest a way of obtaining this?
>>>> 
>>>> --
>>>> Thanks,
>>>> Sachith Withana
>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> Thanks,
>>> Sachith Withana
>>> 
>>> 
>> 
> 
> 
> -- 
> Thanks,
> Sachith Withana

Reply via email to