使用gin编写下载文件
时间: 2024-05-09 08:21:10 浏览: 7
以下是使用gin编写下载文件的示例代码:
```go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"os"
)
func main() {
r := gin.Default()
r.GET("/download", func(c *gin.Context) {
filename := "example.txt" // 文件名
filePath := "./" + filename // 文件路径
_, err := os.Stat(filePath)
if os.IsNotExist(err) {
c.String(http.StatusNotFound, "File not found")
return
}
file, err := os.Open(filePath)
if err != nil {
c.String(http.StatusInternalServerError, "Internal Server Error")
return
}
defer file.Close()
c.Writer.Header().Set("Content-Disposition", "attachment; filename="+filename)
c.Writer.Header().Set("Content-Type", "application/octet-stream")
c.File(filePath)
})
r.Run(":8080")
}
```
在上面的示例代码中,我们首先定义了一个路由 `/download` ,当用户访问该路由时,会从服务器上下载一个名为 `example.txt` 的文件。
我们在路由处理函数中,首先检查文件是否存在。如果文件不存在,我们会发送一个 `404 Not Found` 响应,否则我们会打开该文件,并将其作为响应的正文发送给客户端。
为了让浏览器自动下载文件,我们还设置了响应头 `Content-Disposition` 和 `Content-Type`。
最后,我们使用 `c.File` 函数来发送文件,该函数会自动设置正文类型和长度。