以下是使用 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 著作权归作者所有。请勿转载和采集!

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