要将文件数据只在内存中流转的话,可以使用bytes.Buffer来实现。

首先,你需要使用http.NewRequest创建一个新的HTTP请求,并指定请求方法、URL和请求体。然后,将文件数据写入bytes.Buffer中,并将其设置为请求体。

接下来,使用AWS SDK的S3客户端的PutObject方法,将HTTP请求发送到S3服务,并将文件数据上传到指定的桶。

以下是一个示例代码:

package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
)

func main() {
	filePath := "/path/to/file"
	bucketName := "your-bucket-name"
	objectKey := "your-object-key"

	// 读取文件数据
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Println("Failed to open file:", err)
		return
	}
	defer file.Close()

	// 将文件数据写入内存中的缓冲区
	buffer := new(bytes.Buffer)
	_, err = io.Copy(buffer, file)
	if err != nil {
		fmt.Println("Failed to read file data:", err)
		return
	}

	// 创建新的HTTP请求
	request, err := http.NewRequest("PUT", fmt.Sprintf("https://%s.s3.amazonaws.com/%s", bucketName, objectKey), buffer)
	if err != nil {
		fmt.Println("Failed to create HTTP request:", err)
		return
	}

	// 使用AWS SDK的S3客户端发送请求并上传文件数据
	sess := session.Must(session.NewSession())
	s3Client := s3.New(sess)

	_, err = s3Client.PutObject(&s3.PutObjectInput{
		Bucket: aws.String(bucketName),
		Key:    aws.String(objectKey),
		Body:   buffer,
	})
	if err != nil {
		fmt.Println("Failed to upload file:", err)
		return
	}

	fmt.Println("File uploaded successfully")
}

请注意,此代码仅适用于小文件,因为它将整个文件读取到内存中。对于大文件,你可能需要使用分片上传来处理

golangaws sdk 中转HTTP上传服务如果做到文件数据只在内存中流转

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

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