Heim  >  Artikel  >  Backend-Entwicklung  >  Wie streame ich große Dateien mit minimaler Speicher- und Festplattennutzung zu AWS S3?

Wie streame ich große Dateien mit minimaler Speicher- und Festplattennutzung zu AWS S3?

DDD
DDDOriginal
2024-11-07 17:06:02719Durchsuche

How to Stream Large Files to AWS S3 with Minimal Memory and Disk Usage?

Streaming-Datei-Upload auf AWS S3 mit minimalem Speicher- und Datei-Festplattenbedarf

Problem: Sie müssen eine hochladen große Multipart-/Formulardatendateien direkt in AWS S3 übertragen und gleichzeitig die Speicher- und Dateifestplattennutzung minimieren.

Lösung: Nutzen Sie den AWS S3 Uploader mit den folgenden Schritten:

  1. Erstellen Sie einen Uploader mit einer benutzerdefinierten Konfiguration, einschließlich Teilegröße, Parallelität und maximaler Upload-Teile nach Bedarf.
  2. Öffnen Sie die hochzuladende Datei und übergeben Sie sie als Eingabe an den Uploader.
  3. Initiieren Sie den Datei-Upload-Prozess mit dem Uploader.
  4. Verarbeiten Sie das Upload-Ergebnis und überwachen Sie seinen Fortschritt.

Beispielcode:

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"
)

// Configure Amazon S3 credentials and connection
var accessKey = ""
var accessSecret = ""

func main() {
    // Determine if your AWS credentials are configured globally
    var awsConfig *aws.Config
    if accessKey == "" || accessSecret == "" {
        // No credentials provided, load the default credentials
        awsConfig = &aws.Config{
            Region: aws.String("us-west-2"),
        }
    } else {
        // Static credentials provided
        awsConfig = &aws.Config{
            Region:      aws.String("us-west-2"),
            Credentials: credentials.NewStaticCredentials(accessKey, accessSecret, ""),
        }
    }

    // Create an AWS session with the configured credentials
    sess := session.Must(session.NewSession(awsConfig))

    // Create an uploader with customized configuration
    uploader := s3manager.NewUploader(sess, func(u *s3manager.Uploader) {
        u.PartSize = 5 * 1024 * 1024 // Set the part size to 5MB
        u.Concurrency = 2           // Set the concurrency to 2
    })

    // Open the file to be uploaded
    f, err := os.Open("file_name.zip")
    if err != nil {
        fmt.Printf("Failed to open file: %v", err)
        return
    }
    defer f.Close()

    // Upload the file to S3
    result, err := uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String("myBucket"),
        Key:    aws.String("file_name.zip"),
        Body:   f,
    })
    if err != nil {
        fmt.Printf("Failed to upload file: %v", err)
        return
    }
    fmt.Printf("File uploaded to: %s", result.Location)
}

Durch die Verwendung des S3-Uploaders und das Streamen der Datei können Sie die Speicher- und Dateifestplattennutzung während des Upload-Vorgangs minimieren und so eine effiziente Verarbeitung großer Dateien gewährleisten.

Das obige ist der detaillierte Inhalt vonWie streame ich große Dateien mit minimaler Speicher- und Festplattennutzung zu AWS S3?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn