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)
您需要阅读有关
内容类型的信息。写下正确的标题并将数据下载到正文中。