将POST请求的内容下载到文件

时间:2014-11-04 17:05:45

标签: brightscript

我正在开发一个显示MJPEG视频的Roku应用程序。这有点棘手,因为据我所知,在Brightscript中没有真正的方法来处理HTTP上的通用流。我所做的工作是使用roUrlTransfer.GetToFile启动下载。然后,我可以处理在连续下载MJPEG时创建的tmp文件。我必须每隔一段时间清理文件并重新启动传输,以避免溢出存储空间,但它运行良好。

我遇到的问题是我需要支持的一个来源要求我发布一些会话信息以便下拉我需要显示的MJPEG。据我所知,roUrlTransfer没有提供POST字符串并将结果保存为文件的方法。有没有办法实现这一点,我没有看到?

3 个答案:

答案 0 :(得分:2)

此问题的解决方法是将url设置为正常 GET 请求(查询字符串中的参数)并将请求方法覆盖为 POST 。然后,您可以使用 GetToString()来返回请求数据。见下面的例子:

conn = CreateObject("roUrlTransfer")
url = "http://somedomain.com/endpoint?param1=foo&param2=bar"
conn.SetUrl(url)
conn.SetRequest("POST")    'do not forget to overwrite http method
data = conn.GetToString()

编辑:我刚刚意识到我的回复没有回答您的问题。无论如何,我不会删除它,因为它可能是其他人的答案。

答案 1 :(得分:0)

你最好的问题是在forums.roku.com上的开发者论坛

我相信我听说要从帖子中获取身体,你必须使用异步版本的帖子, http://sdkdocs.roku.com/display/sdkdoc/ifUrlTransfer#ifUrlTransfer-AsyncPostFromStringrequestasStringasBoolean

随着调用的进行,你将获得roUrlEvent,甚至可能不需要将MJPEG保存到tmp:处理它(可以在内存中切片和切块.tmp:无论如何都是RAM驱动器)

答案 2 :(得分:0)

目前,执行此操作的唯一方法是使用ifUrlTransfer.AsyncPostFromFiletoFile(sourcefile,DestFile),然后您可以从文件系统中读取响应正文。如果下载是媒体文件,您应该确保它具有正确的扩展名,因为Roku倾向于根据扩展名决定什么媒体类型。