[Lazarus] Translating php://input into fcl-web

"Leonardo M. Ramé" l.rame at griensu.com
Sun Aug 24 01:09:24 CEST 2014


On 23/08/14 18:40, "Leonardo M. Ramé" wrote:
> On 23/08/14 17:18, silvioprog wrote:
>> On Sat, Aug 23, 2014 at 3:12 PM, "Leonardo M. Ramé" <l.rame at griensu.com
>> <mailto:l.rame at griensu.com>> wrote:
>>
>>     Hi, I'm trying to translate this PHP code to fcl-web (actually
>>     brookframework):
>>
>>     <?php
>>     $content = file_get_contents('php://__input');
>>     $fh = fopen('output.wav', 'w') or die("can't open file");
>>     fwrite($fh, $content);
>>     fclose($fh);
>>     ?>
>>
>>     The difficult part is the line with
>>     "file_get_contents('php://__input')", it contains the whole POST
>>     content as binary.
>>
>>     What I already did was this:
>>
>>     procedure TActAudio.Post;
>>     var
>>        lWav: TMemoryStream;
>>     begin
>>        lWav := TMemoryStream.Create;
>>        try
>>          lWav.Write(HttpRequest.__Content[1],
>> HttpRequest.ContentLength);
>>          lWav.Position:= 0;
>>          lWav.SaveToFile('/tmp/output.__wav');
>>        finally
>>          lWav.Free;
>>        end;
>>     end;
>>
>>     But the output.wav result is corrupt, while the php one is correct.
>>
>>     Any hint?.
>>
>>     Regards,
>>
>>
>> Worked fine here:
>>
>> procedure TMyAction.Post;
>> begin
>>    with TFileStream.Create('out.txt', fmCreate) do
>>    try
>>      Write(TheRequest.Content[1], TheRequest.ContentLength);
>>    finally
>>      Free;
>>    end;
>> end;
>>
>> POST /cgi1.br <http://cgi1.br> HTTP/1.1
>>
>> {"key1":"value1","key2":"value2"}
>>
>> out.txt:
>> {"key1":"value1","key2":"value2"}
>>
>> Or:
>>
>> procedure TMyAction.Post;
>> begin
>>    with TMemoryStream.Create do
>>    try
>>      Write(TheRequest.Content[1], TheRequest.ContentLength);
>>      SaveToFile('post.txt');
>>    finally
>>      Free;
>>    end;
>> end;
>>
>> P.S.: php://input is not available with enctype="multipart/form-data".
>>
>
> Yes, with plain text everything works ok, the problem raises when I
> try to receive binary data, in this case a WAV file, enctype:
> "audio/x-wav".
>
> The client (a Flash app running on the browser) is sending a POST
> message without params, just the binary data.
>
>
I made an example using fcl-web (without Brook) and the problem persists.

As I cannot attach files here, please download this:

http://tempsend.com/6088747E14/DBFE/wami.tar.gz

That's an example for anyone to test, please uncompress and copy the 
following files to your apache documents folder (/var/www/html on Ubuntu):

testwami.html
swfobject.js
wamirecorder.js

Also please download the file Wami.sfw from here: 
https://wami-recorder.googlecode.com/hg/example/client/Wami.swf and copy 
to the same folder as the previous files. I cannot attach it here 
because of email size restrictions of the mailing list.

Also please compile the project cgiproject.lpi contained in wami.tar.gz, 
then copy the executable to your /cgi-bin/ directory.


Regards,

-- 
Leonardo M. Ramé
http://leonardorame.blogspot.com






More information about the Lazarus mailing list