还是刚才的要求,用gin框架来实现
时间: 2024-03-01 09:55:04 浏览: 112
以下是使用 Gin 框架实现接收 POST 方法上传文件的代码:
```go
package main
import (
"fmt"
"io"
"net/http"
"os"
"path/filepath"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.POST("/upload", uploadHandler)
router.Run(":8080")
}
func uploadHandler(c *gin.Context) {
file, handler, err := c.Request.FormFile("file")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Error Retrieving the File",
})
return
}
defer file.Close()
// 创建路径
err = os.MkdirAll("uploads", os.ModePerm)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": fmt.Sprintf("Error Creating Path: %s", err.Error()),
})
return
}
// 保存文件
f, err := os.OpenFile(filepath.Join("uploads", handler.Filename), os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": fmt.Sprintf("Error Saving File: %s", err.Error()),
})
return
}
defer f.Close()
io.Copy(f, file)
c.JSON(http.StatusOK, gin.H{
"message": "File Uploaded Successfully",
})
}
```
以上代码中,我们使用了 Gin 框架提供的 `gin.Default()` 函数创建了一个默认的路由器,并使用 `router.POST()` 函数定义了一个名为 `/upload` 的路由,其中 `uploadHandler()` 函数处理了该路由的请求。接收上传的文件和判断错误的方式与之前的示例相同,不再赘述。我们使用了 `os.MkdirAll()` 创建了上传文件的保存路径,并使用 `os.OpenFile()` 创建文件,通过 `io.Copy()` 函数将上传的文件内容保存到该文件中。最后,我们使用 `c.JSON()` 函数向客户端发送 JSON 格式的响应。
在这个示例中,我们将上传的文件保存在了名为 `uploads` 的文件夹中,当然,您可以根据实际情况修改文件夹名称和路径。与之前的示例一样,我们使用了 `defer` 关键字延迟关闭打开的文件和文件流,避免资源泄漏。
阅读全文