From: "Jesús Gabriel y Galán" Date: 2011-07-20T20:41:42+09:00 Subject: Re: File copy from Client to Server via web-services On Wed, Jul 20, 2011 at 11:59 AM, Rails Crazy Idiot wrote: > Hi, > > I am trying to use Apache Thrift for creating an API offering many > functionalities which include file uploads as well. Nothing to bother > about, it is another full-stack language independent client/server > webserice like SOAP. > > It supports, int, string, bool and some other basic stuff. There is no > File datatype in the Thrift service, which I can use to send the files > attaching them directly. The max I should be using for file uploads is > the string datatype. > > I have received some advice from some Thrift guys saying that we can > definitely upload some files through the thrift web services. I have to > convert the file into binary strings, assign that converted string to a > string variable and then send it via thrift to the server. > > In this process, I am able to convert the file into a string by the > File.read('','rb'){|f| f.read}  OR > IO.read('') > command. > > I am able to send them across the Thrift service, but I have to convert > it on the server side to the actual file. > > When I am doing the writing with the help of File.new > > File.new('','w'){|f| f << transferred_file_content} > > , I am actually not getting the complete file. The size of the file is > almost equal to the actual file(infact a little more), but the file is > not complete. This is working for simple txt files, but if I want to use > this for .doc and PDF files, this is not working. I think there is > something I am missing. Try writing it as binary: File.new('','wb'){|f| f << transferred_file_content} (note the 'wb' flag passed to File.new) Jesus.