单文件上传
前端
<body>
<form action="http://127.0.0.1:9090/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file_name">
<input type="submit" value="upload">
</form>
</body>
后端
package main
import (
"log"
"net/http"
"path"
"github.com/gin-gonic/gin"
)
//单文件上传
func uploadfile(c *gin.Context) {
file, _ := c.FormFile("file_name") //对应的是前端的文件名标签
log.Println(file.Filename) //日志打印文件名
dst := path.Join("./static", file.Filename) //存储目录static,目录必须是存在的
c.SaveUploadedFile(file, dst) //存储
c.JSON(http.StatusOK, gin.H{ //返回上传成功提示
"message": "upload succeed",
})
}
func main() {
router := gin.Default() //定义默认路由
router.POST("/upload", uploadfile) //文件上传
router.Run(":9090") //绑定0.0.0.0:9090
}
多文件上传
前端
后端
和多文件没差多少,就是多了遍历存储。
package main
import (
"log"
"net/http"
"path"
"github.com/gin-gonic/gin"
)
//多文件上传
func uploadfiles(c *gin.Context) {
form, _ := c.MultipartForm()
files := form.File["file_name"] //对应的是前端的文件名标签,注意,这里不是括号了,是中括号,因为这里是map
for _, f := range files {
log.Println(f.Filename) //日志打印文件名
dst := path.Join("./static", f.Filename) //存储目录static
c.SaveUploadedFile(f, dst) //存储
c.JSON(http.StatusOK, gin.H{ //返回上传成功提示
"message": "upload succeed",
})
}
}
func main() {
router := gin.Default() //定义默认路由
router.POST("/upload", uploadfiles) //多文件上传
router.Run(":9090") //绑定0.0.0.0:9090
}