go web、三行代码优雅上传与下载
在日常开发中对文件操作是避免不了的,上传啊下载啊复制啊等等
在我们来学习如何对文件来操作
废话不多说,看文档哈哈哈哈哈哈
打开http包可以搜索File可以看到如下,似乎发现了什么???
点进去一看,好家伙武功秘籍api啊
于是借着我那月薪3500Java开发中的一些经验,上传文件emmmm是不是得先来个表单?
写个表单?写毛线,老子用Postman 页面都懒得写了,就这么决定了,此时嘴角疯狂张扬,漏出会心一笑,嘻嘻嘻嘻嘻…
先把api定好,先来个两个文件
打开白嫖后破解无限期白嫖30天的golang idea,同时点起一根细南京,抽烟只抽煊赫门,一生只爱idea,写下了以下go 代码。
package main
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
//上传文件
// http://127.0.0.1:9090/api/uploadFile
r.POST("/api/uploadFile", func(c *gin.Context) {
//提取用户上传的文件
file, err := c.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
} else {
fmt.Printf(file.Filename)
//保存路径 拼接当前目录下
dst := fmt.Sprintf("./%s", file.Filename)
fmt.Printf(dst)
// 上传文件到指定的目录
c.SaveUploadedFile(file, dst)
c.JSON(http.StatusOK, gin.H{
"data":"ok",
})
}
})
//上传多个文件
r.POST("/api/uploadManyFile", func(c *gin.Context) {
form, _ := c.MultipartForm()
files := form.File["file"]
for _,file := range files {
fmt.Printf(file.Filename)
//保存路径 拼接当前目录下
dst := fmt.Sprintf("./%s", file.Filename)
fmt.Printf(dst)
// 上传文件到指定的目录
c.SaveUploadedFile(file, dst)
}
c.JSON(http.StatusOK, gin.H{
"data":"ok",
})
})
r.Run(":9090") // 监听并在 0.0.0.0:9090 上启动服务
}
run 启动,点击postman send发送http请求,返回ok
怀着激动又忐忑的心情,打开项目目录瞄了一眼 成功!!!!
嘻嘻嘻嘻,go语言果然精妙,优雅,简洁。。。。
那下载文件呢??
嗯???
下载文件??按照http规范?设置http头 以及响应格式?
//下载文件
r.GET("/api/download", func(c *gin.Context) {
dst := fmt.Sprintf("./%s", "GO专家编程.pdf")
//文件的http头
c.Header("Content-Type", "application/octet-stream")
c.Header("Content-Disposition", "attachment; filename=" + "GO专家编程.pdf")
c.Header("Content-Transfer-Encoding", "binary")
c.File(dst)
})
冲!!!
postman走起,不不不 稳点 post识别不了二进制,还是浏览器浏览器…我认怂
谷歌 go 、牛批 6666 我的宝贝!!!
哎 好傻雕啊我!