gpt4 book ai didi

go - 回声服务器扭曲图像响应主体

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:31 26 4
gpt4 key购买 nike

尝试为图像编写一个简单的回显服务器,但它扭曲了文件。出了什么问题?

package main

import (
"fmt"
"io"
"net/http"
)

type FlushWriter struct {
w io.Writer
}

func (fw *FlushWriter) Write(bytes []byte) (int, error) {
count, e := fw.w.Write(bytes)
fw.w.(http.Flusher).Flush()
return count, e
}

func main() {
http.HandleFunc("/", index)
fmt.Println("listening on 8000")
http.ListenAndServe(":8000", nil)
}

func index(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "image/jpeg")
fw := &FlushWriter{ w: w }
io.Copy(fw, r.Body)
}

并对其进行测试。

$ curl --data-binary @image.jpg -o test.jpg localhost:8000

最佳答案

您忽略了代码中的错误,并且缺少 ErrBodyReadAfterClose

一旦开始写入 http.ResponseWriter,您就无法从 http.Request.Body 中读取数据

http://golang.org/pkg/net/http/#pkg-variables

ErrBodyReadAfterClose is returned when reading a Request or Response Body after the body has been closed. This typically happens when the body is read after an HTTP Handler calls WriteHeader or Write on its ResponseWriter

在将图像写回之前,您需要在服务器上缓冲图像。

除了 Go 不允许您这样做的事实之外,即使您要制作一个有效的处理程序,大多数客户端也会导致此死锁,因为图像大于所涉及的所有缓冲区的总和。这需要一个可以同时发送和接收的客户端,很少有人愿意这样做。

关于go - 回声服务器扭曲图像响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24373767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com