Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menstrim fail berbilang bahagian/data bentuk yang besar ke AWS S3 dengan cekap dengan Go?

Bagaimanakah saya boleh menstrim fail berbilang bahagian/data bentuk yang besar ke AWS S3 dengan cekap dengan Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-09 06:43:02699semak imbas

How can I stream large multipart/form-data files to AWS S3 efficiently with Go?

Strim Muat Naik Fail ke AWS S3 dengan Go

Menstrim terus fail berbilang bahagian/data bentuk besar ke AWS S3 ialah cara yang cekap untuk meminimumkan penggunaan memori dan cakera fail jejak.

Penyelesaian

Gunakan pengurus muat naik AWS SDK for Go untuk menstrim fail terus ke S3. Berikut ialah contoh:

package main

import (
    "fmt"
    "os"

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

var (
    filename      = "file_name.zip"
    myBucket      = "myBucket"
    myKey         = "file_name.zip"
    accessKey     = ""
    accessSecret  = ""
)

func main() {
    var awsConfig *aws.Config
    if accessKey == "" || accessSecret == "" {
        awsConfig = &aws.Config{
            Region: aws.String("us-west-2"),
        }
    } else {
        awsConfig = &aws.Config{
            Region:      aws.String("us-west-2"),
            Credentials: credentials.NewStaticCredentials(accessKey, accessSecret, ""),
        }
    }

    sess := session.Must(session.NewSession(awsConfig))
    uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
        u.PartSize = 5 * 1024 * 1024
        u.Concurrency = 2
    })

    f, err := os.Open(filename)
    if err != nil {
        fmt.Printf("failed to open file %q, %v", filename, err)
        return
    }
    defer f.Close()

    result, err := uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String(myBucket),
        Key:    aws.String(myKey),
        Body:   f,
    })

    if err != nil {
        fmt.Printf("failed to upload file, %v", err)
        return
    }

    fmt.Printf("file uploaded to, %s\n", result.Location)
}

Dengan menggunakan pengurus muat naik dengan parameter tersuai, anda boleh mengkonfigurasi saiz bahagian, tahap konkurensi dan kiraan bahagian muat naik maksimum untuk mengoptimumkan proses penstriman.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menstrim fail berbilang bahagian/data bentuk yang besar ke AWS S3 dengan cekap dengan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn