Gin框架上傳下載
上傳(支持批量上傳)
httpRouter.POST("/upload", func(ctx *gin.Context) {
forms, err := ctx.MultipartForm()
if err != nil {
fmt.Println("error", err)
}
files := forms.File["fileName"]
for _, v := range files {
if err := ctx.SaveUploadedFile(v, fmt.Sprintf("%s%s", "./file/", v.Filename)); err != nil {
fmt.Println("保存文件失敗")
}
}
})
下載
httpRouter.GET("/download", func(ctx *gin.Context) {
filePath := ctx.Query("url")
//打開文件
file, err := os.Open("./" + filePath)
if err != nil {
fmt.Println("打開文件錯誤", err)
}
defer file.Close()
//獲取文件的名稱
fileName := path.Base(filePath)
ctx.Header("Content-Type", "application/octet-stream")
ctx.Header("Content-Disposition", "attachment; url="+fileName)
ctx.Header("Content-Transfer-Encoding", "binary")
ctx.Header("Cache-Control", "no-cache")
ctx.File("./" + filePath)
})
原生的上傳下載
上傳(支持批量上傳)
http.HandleFunc("/upload", func(w http.ResponseWriter, r *http.Request) {
if err := r.ParseMultipartForm(20); err != nil {
fmt.Println("解析url失敗", err)
}
if r.Method == "GET" {
files, err := template.ParseFiles("fileName")
if err != nil {
fmt.Println("解析文件失敗", err)
}
files.Execute(w, nil)
} else {
files := r.MultipartForm.File["fileName"]
for _, v := range files {
f, err := os.Create("./file/" + v.Filename)
if err != nil {
fmt.Println("創建文件失敗")
}
file, err := v.Open()
if err != nil {
fmt.Println("打開文件失敗")
}
_, err = io.Copy(f, file)
if err != nil {
fmt.Println("拷貝文件數據失敗")
}
}
w.Write([]byte("upload success"))
}
})
下載
http.HandleFunc("/download", func(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
fmt.Println("解析url失敗", err)
}
fileName := r.Form["fileName"][0]
filePath := "./" + fileName
_, err := os.Stat(filePath)
if err != nil || os.IsNotExist(err) {
fmt.Println("文件不存在", err)
}
bytes, err := os.ReadFile(filePath)
if err != nil {
fmt.Println("讀取文件失敗", err)
}
w.Header().Add("Content-Type", "application/octet-stream")
w.Header().Add("Content-Disposition", "attachment; filename= "+fileName)
w.Write(bytes)
})
github個人博客
https://wangyufenggogogo.github.io