- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个客户端发出下载文件的请求,Web 服务器将此请求转发到实际保存该文件的资源服务器。从资源服务器返回的 *http.Response 有 Body io.ReaderCloser 从资源服务器流式传输文件内容。但是我正处于我想开始将其写入来自客户端的原始 http.ResponseWriter 的地步。查看 http.ResponseWriter 接口(interface),它只包含一个采用 byte slice 段的 Write 方法,这让我认为将文件内容返回给客户端的唯一方法是将 Body io.ReaderCloser 读入缓冲区,然后将其放入 http.ResponseWriter 的 Write 方法中。我不想这样做,因为那是非常低效的,通过我的网络服务器流式传输它会更好。这可能吗?
这里有一些代码来说明:
getFile() *http.Response {
//make a request to resource server and return the response object
}
// handle request from client
http.HandleFunc("/getFile", func(w http.ResponseWriter, r *http.Request){
res := getFile()
//how can I stream res.Body into w without buffering ?
})
最佳答案
您可以使用 io.Copy()
正是这样做的。
Copy copies from src to dst until either EOF is reached on src or an error occurs. It returns the number of bytes copied and the first error encountered while copying, if any.
n, err := io.Copy(w, res.Body)
// check err
另请注意,Copy()
不会返回 io.EOF
,而是返回 nil
,因为如果它可以“复制”所有内容,直到 src
报告 io.EOF
,这不被认为是错误。
关于http - 如何将 io.ReadCloser 流式传输到 http.ResponseWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34855343/
我知道 ResponseWriter 上的 startElement、endElement 和 writeAttribute 方法。我的问题是,例如,我想通过将 h:commandLink 声明为 H
我从 Brian W. Kernighan 和 Alan Donovan 的书 The Go Programming Language 中编写了任务。这是任务 № 3.4我的请求处理程序如下所示: f
出于调试原因,我想直接在标准输出中查看我的 ResponseWriter 的输出。因为响应将由 JavaScript 处理,所以我无法在那里看到输出。 是否有一种简单的解决方案可以将 Response
我无法理解 ResponseWriter 语法的一部分。 type ResponseWriter interface { Header() Header Write([]byte) (
我无法理解 ResponseWriter 语法的一部分。 type ResponseWriter interface { Header() Header Write([]byte) (
我不明白为什么代码正确生成了 view.html 和 post.html 数据,但将其全部显示为原始文本。我一直在关注指南 here在我构建它时,我认为从 Execute 函数生成的 html 将被发
func main() { http.HandleFunc("/", foo) http.ListenAndServe(":3000", nil) } func foo(w http.Resp
我试图在 golang 中使用 httptest 包。我发现了一些我不明白的东西。这是 code : package main import ( "fmt" "io/ioutil"
我想弄清楚是否有可能在编写 Web 应用程序时不必随处传递 http.ResponseWriter。我正在设置一个简单的 mvc web 框架,我发现自己必须通过各种函数传递 http.Respons
假设我有一个向 http.ResponseWriter 添加特定 header 的中心方法。我不想使用 HandleFunc 包装器。 我想知道,我是否会通过引用发送 ResponseWriter。那
我正在做一些测试,我意识到编写器不会自动刷新,即在所有组件都已呈现之前,我在客户端看不到任何响应? 我还尝试手动刷新响应编写器,但没有任何区别。有没有办法允许手动刷新,以便客户端更早地获得响应? 谢谢
我编写了一个简单的http HandleFunc,需要2秒钟来处理,然后我将超时时间为1秒的请求发送到服务器。我希望调用ResponseWriter.Write会返回错误,但不会。请给我解释一下。 服
我正在尝试创建一个存储 http.ResponseWriters 的映射,以便稍后在单独的线程完成相关计算后写入它们。该 map 在我的主要定义如下: jobs := make(map[uint32]
在我点击前端的发布按钮后,我将数据接收到我的处理程序,创建电子邮件并发送它,但我想通知用户电子邮件的状态(已发送或未发送)并将其重定向回主页。问题是我不知道如何同时传递 alert 和 redirec
我正在用 GoLang 编写代码。作为其中的一部分,我通过使用 github.com/mongodb/mongo-go-driver/mongo、github.com/mongodb/mongo-go
我是 Go 的新手。但是我正在玩 REST Api。在我拥有的两个函数中,我无法从 json.Marshal 获得与 json.Encoder 相同的行为 我想使用这个函数来 gzip 我的回复: f
我有一个 Web 应用程序需要不断写入(可能永远不会结束)http.ResponseWriter,并将这些输出显示到 html 页面。它是这样的: func handler(w http.Respon
我正在使用 go 1.4.2 并且实现似乎没有 CloseNotifier 因为我想在长轮询处理程序中使用它,例如: func Pollhandler(w http.ResponseWriter, r
我对 go http 包进行了一些实验。 看下面的代码片段,一个非常简单的http服务器: package main import ( "fmt" "github.com/codega
给定一个http.ResponseWriter,它已经完成了一些.Write(),是否可以直接获得响应的当前累计长度? 我很确定这可以通过 Hijack 转换来完成,但我想知道是否可以直接完成。 最佳
我是一名优秀的程序员,十分优秀!