用gin在golang中服务文件端点

v1uwarro  于 2023-05-20  发布在  Go
关注(0)|答案(1)|浏览(181)

我想为动态加载的用户文件(让我们假设简单的文件存储),但我想在发送实际文件(如用户被禁止)之前添加一些检查。我知道有一种方法可以在gin中提供整个目录,也有一种方法可以将文件作为附件发送(How to server a file from a handler in golang),但是否有一种方法可以简单地将文件作为实际图像发送回浏览器(没有下载附件提示),就像这个纯golang示例(https://golangbyexample.com/image-http-response-golang/)一样:

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
}
bjp0bcyl

bjp0bcyl1#

是的,这是可能的与g-gin。可以使用gin context的Data方法。
Data将一些数据写入body流并更新HTTP代码。

import (
    "io/ioutil"
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()

    r.GET("/photo", photoHandler)

    if err := r.Run(":8080"); err != nil {
        panic(err)
    }
}

func photoHandler(c *gin.Context) {

    // do the other checks here

    // read the file
    fileBytes, err := ioutil.ReadFile("test.png")
    if err != nil {
        panic(err)
    }

    
    c.Data(http.StatusOK, "image/png", fileBytes)
}

在这里检查gin提供的示例代码

相关问题