File go)如何提供下载服务?

File go)如何提供下载服务?,file,go,server,File,Go,Server,我做上传服务器 但我不能使下载服务器 package main import ( "fmt" "io" "os" "github.com/gin-gonic/gin" ) func uploadHandler(c *gin.Context) { uid := c.Request.FormValue("uid") file, header, err := c.Request.FormFile("uploadFile") filename

我做上传服务器 但我不能使下载服务器

package main

import (
    "fmt"
    "io"
    "os"

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

func uploadHandler(c *gin.Context) {
    uid := c.Request.FormValue("uid")
    file, header, err := c.Request.FormFile("uploadFile")
    filename := header.Filename
    fmt.Println(filename)
    err = os.Mkdir("./upload/"+uid, 777)
    out, err := os.Create("./upload/" + uid + "/" + filename)
    _, err = io.Copy(out, file)
}

func main() {
    r := gin.Default()
    r.POST("/goupload", uploadHandler)
    r.POST("/godownload", downloadHandler)
    // listen and server on 0.0.0.0:8080
    r.Run()
}
那么,如何制作下载服务器呢


我将使用post uid&downloadfilename。

您可以编写一个新的处理程序,并使用或从http包

f, err := os.Open(yourFile)
if err != nil {
    return err
}
defer f.Close()

fileInfo, err := f.Stat()
if err != nil {
    return err
}

http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), f)
要强制浏览器打开下载对话框,请添加
内容配置
内容类型
标题,并将“写入文件”内容写入正文:

f, err := os.Open(yourFile)
if err != nil {
    return err
}
defer f.Close()

w.Header().Set("Content-Disposition", "attachment; filename=YourFile")
w.Header().Set("Content-Type", r.Header.Get("Content-Type"))

io.Copy(w, f)

您需要阅读有关
内容类型的信息。写下正确的标题并将数据下载到正文中。