Use go gin server for file uploads
- 2020-06-23 00:39:36
- OfStack
go get has installed gin before, now let's play go gin server as the image upload service, the code directory is as follows:
taoge:~/test_gin$ tree
.
|-- public
|-- template
| `-- select_file.html
`-- test_gin_server.go
2 directories, 2 files
taoge:~/test_gin$
test_gin_server. go content:
package main
import (
"fmt"
"io"
"log"
"net/http"
"os"
"github.com/gin-gonic/gin"
)
func upload(c *gin.Context) {
file, header, err := c.Request.FormFile("file")
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("file err : %s", err.Error()))
return
}
filename := header.Filename
out, err := os.Create("public/" + filename)
if err != nil {
log.Fatal(err)
}
defer out.Close()
_, err = io.Copy(out, file)
if err != nil {
log.Fatal(err)
}
filepath := "http://localhost:8080/file/" + filename
c.JSON(http.StatusOK, gin.H{"filepath": filepath})
}
func main() {
router := gin.Default()
router.LoadHTMLGlob("template/*")
router.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "select_file.html", gin.H{})
})
router.POST("/upload", upload)
router.StaticFS("/file", http.Dir("public"))
router.Run(":8080")
}
select_file. html's content is:
<html>
<body>
<form action="http://localhost:8080/upload/" enctype="multipart/form-data" method="POST">
<input type="file" name="file" id="pic" accept="*" />
<button type="submit"> submit </button>
</form>
</body>
</html>
go run test_gin_server.go
Run, execute: http://localhost:8080/ in the browser, then appear the picture upload page, so you can upload the picture, play 1, OK, server corresponding public directory has the corresponding picture.
Not much said.
conclusion