单文件上传

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "os"
  6. "time"
  7. "github.com/gin-gonic/gin"
  8. )
  9. // 解决跨域问题
  10. func Cors() gin.HandlerFunc {
  11. return func(c *gin.Context) {
  12. method := c.Request.Method
  13. //fmt.Println(method)
  14. c.Header("Access-Control-Allow-Origin", "*")
  15. c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token, x-requested-with")
  16. c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, PATCH, DELETE")
  17. c.Header("Access-Control-Allow-Credentials", "true")
  18. c.Header("Access-Control-Expose-Headers", "Content-Type,Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers")
  19. // 放行所有OPTIONS方法,因为有的模板是要请求两次的
  20. if method == "OPTIONS" {
  21. c.AbortWithStatus(http.StatusNoContent)
  22. }
  23. // 处理请求
  24. c.Next()
  25. }
  26. }
  27. func main() {
  28. r := gin.Default()
  29. r.Use(Cors())
  30. r.POST("/upload", func(c *gin.Context) {
  31. file, _ := c.FormFile("file")
  32. dir_path := "./runtime/"
  33. file_path := fmt.Sprintf("%s %d %s", dir_path, (time.Now()).Unix(), file.Filename)
  34. os.Mkdir("./runtime", os.ModePerm) // 创建文件夹
  35. c.SaveUploadedFile(file, file_path) // 保存上传文件到指定路径
  36. c.JSON(200, gin.H{
  37. "msg": "upload succeed",
  38. })
  39. })
  40. r.Run(":8080") // Run("里面不指定端口号默认为8080")
  41. }

使用 CURL调试

  1. #!/usr/bin/env bash
  2. __curl_update() {
  3. echo "$(date)" >/tmp/go-testfile.txt
  4. curl http://localhost:8080/upload \
  5. -X POST \
  6. -H "Content-Type: multipart/form-data" \
  7. -F "file=@/tmp/go-testfile.txt"
  8. }
  9. __curl_update

结果

image.png