Golang Gin 框架:将网络图片 URL 下载到 OSS 并校验大小和格式
以下是一个示例代码,用于使用 Gin 框架将网络图片下载到 OSS 并校验大小和格式:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"github.com/gin-gonic/gin"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
const (
ossEndpoint = "oss-cn-hangzhou.aliyuncs.com"
ossAccessKeyID = "your_access_key_id"
ossAccessKeySecret = "your_access_key_secret"
ossBucketName = "your_bucket_name"
)
func main() {
// 初始化 OSS 客户端
client, err := oss.New(ossEndpoint, ossAccessKeyID, ossAccessKeySecret)
if err != nil {
panic(err)
}
// 获取 OSS Bucket
bucket, err := client.Bucket(ossBucketName)
if err != nil {
panic(err)
}
// 初始化 Gin
r := gin.Default()
// 定义上传图片的路由和处理函数
r.POST("/upload", func(c *gin.Context) {
// 获取图片 URL
imageURL := c.PostForm("image_url")
// 发送 HTTP 请求获取图片
resp, err := http.Get(imageURL)
if err != nil {
c.JSON(400, gin.H{
"error": err.Error(),
})
return
}
defer resp.Body.Close()
// 读取图片内容
imageContent, err := ioutil.ReadAll(resp.Body)
if err != nil {
c.JSON(400, gin.H{
"error": err.Error(),
})
return
}
// 校验图片大小
if len(imageContent) > 10*1024*1024 {
c.JSON(400, gin.H{
"error": "Image size too large (max 10MB)",
})
return
}
// 校验图片格式
if resp.Header.Get("Content-Type") != "image/jpeg" && resp.Header.Get("Content-Type") != "image/png" {
c.JSON(400, gin.H{
"error": "Invalid image format (only support JPEG and PNG)",
})
return
}
// 上传图片到 OSS
err = bucket.PutObject(fmt.Sprintf("images/%d.jpg", time.Now().Unix()), bytes.NewReader(imageContent))
if err != nil {
c.JSON(400, gin.H{
"error": err.Error(),
})
return
}
// 返回成功响应
c.JSON(200, gin.H{
"message": "Image uploaded successfully",
})
})
// 启动 Gin
r.Run()
}
在上面的代码中,我们首先初始化了 OSS 客户端和 Bucket 对象。然后,我们定义了一个 POST 路由 /upload,用于接收图片 URL 并将其下载到 OSS。在处理函数中,我们首先发送 HTTP 请求获取图片,并使用 ioutil.ReadAll() 函数读取图片内容。然后,我们校验了图片的大小和格式。最后,我们使用 bucket.PutObject() 函数将图片上传到 OSS。
请注意,上面的代码只是一个示例,您需要根据您的具体需求进行修改和优化。例如,您可以添加更多的校验逻辑,如防止恶意 URL、校验图片尺寸等。
原文地址: https://www.cveoy.top/t/topic/lCsl 著作权归作者所有。请勿转载和采集!