Golang Gin 框架: 下载远程图片到 OSS
以下是使用 Golang Gin 框架将远程图片下载到 OSS 的示例代码:
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.POST("/download", DownloadImage)
router.Run(":8080")
}
func DownloadImage(c *gin.Context) {
url := c.PostForm("url") // 获取表单中的 url 参数
if url == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "url参数不能为空"})
return
}
// 获取文件名
filename := url[strings.LastIndex(url, "/")+1:]
if filename == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "无法获取文件名"})
return
}
// 下载图片
resp, err := http.Get(url)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
// 将文件上传到 OSS
endpoint := "oss-cn-hangzhou.aliyuncs.com" // 修改为你的 OSS Endpoint
accessKeyId := "xxx" // 修改为你的 AccessKeyId
accessKeySecret := "xxx" // 修改为你的 AccessKeySecret
bucketName := "xxx" // 修改为你的 Bucket 名称
client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
bucket, err := client.Bucket(bucketName)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
err = bucket.PutObject(filename, bytes.NewReader(body))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "文件已上传到 OSS"})
}
使用 curl 测试:
curl -X POST http://localhost:8080/download -F url=https://www.example.com/test.jpg
原文地址: https://www.cveoy.top/t/topic/lCqx 著作权归作者所有。请勿转载和采集!