去大文件下载并传递给客户端(代理)

时间:2014-03-09 14:36:33

标签: go martini

我有一个基于Martini的小应用程序,面临着一个我无法解决的问题。

我想添加一个应用程序功能,允许用户从第3台服务器获取文件,并在HTTP标头中进行一些更改。某种代理。文件非常大(每个200 + Mb),我希望这些文件“流式传输”到客户端。 “流”是指文件数据应该在应用程序收到第一个字节后立即开始返回客户端,而不会将整个文件保留在磁盘和/或内存中。

Martini和Go有可能吗?

1 个答案:

答案 0 :(得分:2)

是的,一般来说Go是可能的,我不是特别熟悉Martini。调用远程文件的http响应返回Reader接口,您的请求处理程序具有Writer接口。这意味着您可以读取数据流,并编写数据流。让您的责任只是操纵您想要的东西,并将转发的流“修补”到请求流。

Go even在标准库中内置了ReverseProxy实用程序:

http://golang.org/pkg/net/http/httputil/#ReverseProxy

如果需要,您可以将Martini和标准http库混合使用。

[编辑]阅读马丁尼文档,您可以添加像standrad库一样的原始http处理程序,这意味着您确实可以这样做:https://github.com/codegangsta/martini#service-injection