在Go(Golang)中的HTTP响应中返回图片或文件的方法

您所在的位置:网站首页 html打开图片流 在Go(Golang)中的HTTP响应中返回图片或文件的方法

在Go(Golang)中的HTTP响应中返回图片或文件的方法

#在Go(Golang)中的HTTP响应中返回图片或文件的方法| 来源: 网络整理| 查看: 265

概述

net/http包中ResponseWriter接口的Write方法可以用来发送HTTP响应体中的图像 或 文件体。当我们把文件或图像作为HTTP响应的一部分发送时,响应头的内容类型是

application/octet-stream

在GO中,一个响应是由ResponseWriter接口表示的:

https://golang.org/pkg/net/http/#ResponseWriter

ResponseWriter接口被HTTP处理程序用来构建一个HTTP响应。它提供了三个函数来设置响应参数

Header - 用于编写响应头

Write([]byte) - 用于写入响应的正文

WriteHeader(statusCode int) - 用于写入http状态码

Write函数可以用来设置响应体。它需要一个字节的片断作为输入。因此,在将文件或图像作为参数传给Write函数之前,我们需要将其读成一个字节片断。为此我们将使用golang的ioutil包所提供的ReadFile函数。此外,还有一个Header 函数。这个函数可以用来使用Content-Type头来设置响应体的内容类型。

w.Header().Set("Content-Type", "application/octet-stream")

另外,注意WriteHeader 函数可以用来设置响应的HTTP状态代码。

例子

让我们看一个发送文件或图像作为HTTP响应一部分的例子。下面是同样的程序

package main import ( "io/ioutil" "net/http" ) func main() { handler := http.HandlerFunc(handleRequest) http.Handle("/photo", handler) http.ListenAndServe(":8080", nil) } func handleRequest(w http.ResponseWriter, r *http.Request) { fileBytes, err := ioutil.ReadFile("test.png") if err != nil { panic(err) } w.WriteHeader(http.StatusOK) w.Header().Set("Content-Type", "application/octet-stream") w.Write(fileBytes) return }

这就是我们如何将文件或图片读入Go中的一个变量的过程

fileBytes, err := ioutil.ReadFile("test.png")

然后我们把这个变量传递给Write函数

w.Write(fileBytes)

注意,在上面的程序中,我们发送的是test.png ,它存在于我的机器上。你可以用你机器上的任何其他文件代替它。它可以是png或任何其他文件。

另外,我们使用WriteHeader函数来指定200http状态代码。 我们也在设置正确的头信息

w.Header().Set("Content-Type", "application/octet-stream")

运行上述程序。它将在你的本地机器上启动一个8080端口的服务器。现在对服务器进行下面的curl调用。注意在curl调用中,我们也要把输出保存到本地文件中。

curl -v -X POST http://localhost:8080/example > temp.png

输出将如下所示

* Connected to localhost (::1) port 8080 (#0) > POST /example HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Sat, 10 Jul 2021 19:32:47 GMT < Content-Type: image/png < Transfer-Encoding: chunked < { [5846 bytes data] 100 5833 0 5833 0 0 957k 0 --:--:-- --:--:-- --:--:-- 1139k

现在在你进行curl调用的终端中检查当前目录。一个名为test.png的文件将出现,这与服务器发送的文件相同。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3