Posting binary data -- followup
Devin Asay
devin_asay at byu.edu
Tue Dec 14 16:12:56 EST 2010
Reporting back on this issue.
> On 17 nov 2010, at 20:04, Devin Asay wrote:
>
>> Hi all,
>>
>> One of my students is doing a Rev project in which he needs to post binary data (a .mov file, in this case) to a web server. I've never done this, but I'm told that in a standard web form one sets the enctype attribute of a form input to indicate that the data being posted is binary.
>>
>> How would you do this using a Rev--errr--LiveCode post statement?
On Nov 17, 2010, at 12:15 PM, Mark Schonewille wrote:
> Hi Devin,
>
> Before using the post command, execute the following line:
>
> set the httpHeaders to "Content-type: application/binary" & cr & \
> "Content-Transfer-Encoding: binary" & cr & \
> "Content-Length: <length of your data in bytes>"
>
> Let us know if this works for you.
Thanks for this suggestion, Mark. As it turns out, setting the Content-type and transfer-encoding is necessary, but there is a comprehensive solution in the libUrl library. After some digging in the list archives, I came across the solution in a post from (who else?) libURL-meister Dave Cragg. He said on May 15, 2010:
> You can upload a file using post by using libUrlMultipartFormData.
>
> The use is a little complicated. You set the httpHeaders to the first line of the returned data, and lines 2 to the end is the data to post.
>
> There's an example in the Rev docs, but I think some of the text is messed up. (It shows html entities in some places where it shouldn't.) There's another example here:
>
> http://www.lacscentre.com/liburl/liburldoc.html#libUrlMultipartFormData
I followed the example at that URL and it worked like a charm. I used this script, which also displays the multipart form data so you can see what's going on behind the scenes:
on mouseUp
put empty into tForm # create the variable
put "Devin" into tName
put "2010-12-13" into tDate
answer file "Choose file: "
if it is empty then exit mouseUp
put "<file>" & it into tFile
if libUrlMultiPartFormData(tForm, "name", tName, "date", tDate, "file", tFile) is not empty then
answer "error:" & it
else
set the httpHeaders to line 1 of tForm
put tForm into fld 1 -- shows the multipart form data in a field
post line 2 to -1 of tForm to url "http://some.server.com/test_post/a_script.cgi"
-- answer the result -- for debugging: displays error, if any
set the htmltext of fld 3 to it
-- put it into fld 3: uncomment to show raw html
end if
end mouseUp
Hope this is helpful to someone.
Regards,
Devin
Devin Asay
Humanities Technology and Research Support Center
Brigham Young University
More information about the use-livecode
mailing list