以下是一个示例代码,用于从远程网络图片 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。

Golang Gin 框架:从远程 URL 下载图片到 OSS 并校验大小和格式

原文地址: https://www.cveoy.top/t/topic/lCsp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录