以下是一个示例代码,用于使用 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、校验图片尺寸等。

Golang Gin 框架:将网络图片 URL 下载到 OSS 并校验大小和格式

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

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