【问题标题】:go) how to i make download service? [closed]go) 我如何进行下载服务? [关闭]
【发布时间】:2016-02-19 02:25:11
【问题描述】:

我做上传服务器 但我无法制作下载服务器

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 和下载文件名。

【问题讨论】:

  • 您需要阅读有关Content-Type HTTP 标头的信息。编写正确的标题并将您的数据写入正文以供下载。

标签: file go server


【解决方案1】:

您可以编写一个新的处理程序并使用 http 包中的 ServeContentServeFile

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)

要强制浏览器打开下载对话框,请添加Content-DispositionContent-Type 标头并将文件内容写入正文:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2012-08-28
    • 1970-01-01
    • 2012-03-14
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多