Golang Gin 框架: 下载网络图片到 OSS 并校验大小和格式
以下是一个简单的例子,使用 Golang Gin 框架将网络图片下载到 OSS 并校验大小和格式:
package main
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"os"
"path/filepath"
"github.com/gin-gonic/gin"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
r := gin.Default()
// 创建 oss client
client, err := oss.New("your_endpoint", "your_access_key_id", "your_access_key_secret")
if err != nil {
fmt.Println("Error:", err)
return
}
// 获取 bucket
bucket, err := client.Bucket("your_bucket_name")
if err != nil {
fmt.Println("Error:", err)
return
}
r.POST("/upload", func(c *gin.Context) {
// 从请求中获取文件
file, header, err := c.Request.FormFile("file")
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
defer file.Close()
// 校验文件大小和格式
if header.Size > 1024*1024 {
c.JSON(http.StatusBadRequest, gin.H{"error": "File size too large"})
return
}
ext := filepath.Ext(header.Filename)
if ext != ".jpg" && ext != ".jpeg" && ext != ".png" {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid file format"})
return
}
// 读取文件内容
data, err := ioutil.ReadAll(file)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
// 将文件上传到 oss
objectKey := header.Filename
err = bucket.PutObject(objectKey, bytes.NewReader(data))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"success": true})
})
r.Run(":8080")
}
在上面的例子中,我们首先创建了 oss client 和 bucket。然后,我们定义了一个 POST 路由,从请求中获取文件并校验大小和格式。最后,我们将文件上传到 OSS。请注意,上面的例子中我们没有校验文件的内容,只是校验了文件的大小和格式。如果你需要校验文件的内容,请参考 OSS API 文档。
原文地址: https://www.cveoy.top/t/topic/lCsg 著作权归作者所有。请勿转载和采集!