Golang Gin 框架:从远程 URL 下载图片到 OSS 并校验大小和格式
以下是一个示例代码,用于从远程网络图片 URL 下载到 OSS,并校验大小和格式。示例中使用了 gin 框架和 ali-oss SDK。
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 初始化 gin
router := gin.Default()
// 处理上传图片的请求
router.POST("/upload", func(c *gin.Context) {
// 获取远程图片 URL
imgUrl := c.PostForm('img_url')
// 下载远程图片到本地
resp, err := http.Get(imgUrl)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": 'failed to download image'})
return
}
defer resp.Body.Close()
// 校验图片大小和格式
if resp.ContentLength > 10*1024*1024 { // 最大支持 10 MB
c.JSON(http.StatusBadRequest, gin.H{"error": 'image size too large'})
return
}
if resp.Header.Get('Content-Type') != 'image/jpeg' && resp.Header.Get('Content-Type') != 'image/png' {
c.JSON(http.StatusBadRequest, gin.H{"error": 'unsupported image type'})
return
}
// 初始化阿里云 OSS 客户端
client, err := oss.New('<your-endpoint>', '<your-access-key-id>', '<your-access-key-secret>')
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": 'failed to connect to OSS'})
return
}
// 上传图片到 OSS
bucket, err := client.Bucket('<your-bucket>')
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": 'failed to connect to OSS bucket'})
return
}
objectKey := fmt.Sprintf('images/%d.jpg', time.Now().Unix())
err = bucket.PutObject(objectKey, resp.Body)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": 'failed to upload image to OSS'})
return
}
// 返回上传成功的信息
c.JSON(http.StatusOK, gin.H{"url": fmt.Sprintf('http://<your-bucket>.<your-endpoint>/images/%d.jpg', time.Now().Unix())})
})
// 启动 gin
router.Run(":8080")
}
在示例代码中,首先从请求参数中获取远程图片 URL,然后使用 HTTP GET 请求下载图片并校验图片大小和格式。如果校验不通过,则返回错误信息。如果校验通过,则初始化阿里云 OSS 客户端并上传图片到 OSS 中。上传成功后,返回上传成功的信息,其中包括图片在 OSS 中的 URL。
原文地址: https://www.cveoy.top/t/topic/lCsp 著作权归作者所有。请勿转载和采集!