Rumah > pembangunan bahagian belakang > Golang > Muat naik fail terus ke Google Bucket menggunakan REST API

Muat naik fail terus ke Google Bucket menggunakan REST API

WBOY
Lepaskan: 2024-02-05 23:15:03
ke hadapan
539 orang telah melayarinya

使用 REST API 将文件直接上传到 Google 存储桶

Kandungan soalan

Mengikuti contoh go, saya menggunakan kod berikut untuk memuat naik fail ke google bucket:

func uploadFile(bucket string, uploadFilePath string, destFilePath string) error {
    os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", "./credential.json")
    ctx := context.Background()
    client, err := storage.NewClient(ctx)
    if err != nil {
        return fmt.Errorf("storage.NewClient: %v", err)
    }
    defer client.Close()

    // Open local file.
    f, err := os.Open(uploadFilePath)
    if err != nil {
        return fmt.Errorf("os.Open: %v", err)
    }
    defer f.Close()

    ctx, cancel := context.WithTimeout(ctx, time.Second*50)
    defer cancel()
    o := client.Bucket(bucket).Object(destFilePath)
    o = o.If(storage.Conditions{DoesNotExist: true})
    
    // Upload an object with storage.Writer.
    wc := o.NewWriter(ctx)
    if _, err = io.Copy(wc, f); err != nil {
        return fmt.Errorf("io.Copy: %v", err)
    }
    if err := wc.Close(); err != nil {
        return fmt.Errorf("Writer.Close: %v", err)
    }
    return nil
}

func main() {
    bucket := "g1-mybucket-001"
    targetFilePath := "./somefile.txt"
    destFilePath := "it_poc_test_folder/somefile.txt"
    err := uploadFile(bucket, targetFilePath, destFilePath)
    if err != nil {
        fmt.Println(fmt.Errorf("Error uplolading file: %v", err))
    } else {
        fmt.Printf("%s uploaded to %s.\n", targetFilePath, destFilePath)
    }
}
Salin selepas log masuk

Sekarang saya bercadang untuk membungkusnya dan mencipta api rehat untuk muat naik fail. Kemudian saya menyedari bahawa kod itu hanya untuk memuat naik fail tempatan. Bagaimanakah cara saya membungkusnya supaya fail itu masuk terus ke dalam baldi tanpa memuat naiknya ke pelayan terlebih dahulu?


Jawapan betul


Terdapat banyak muat naik fail contoh, perkara utama ialah:

func uploadfile(w http.responsewriter, r *http.request) {

    // ... 
    r.parsemultipartform(10 << 20)
    f, handler, err := r.formfile("myfile")
    if err != nil {
        // handle err
    }
    defer f.close()
    // ...
}
Salin selepas log masuk

Jadi hanya hantar f badan muat naik fail ke logik muat naik awan anda seolah-olah ia adalah fail tempatan:

// same code - different `f` source

// Upload an object with storage.Writer.
wc := o.NewWriter(ctx)
if _, err = io.Copy(wc, f); err != nil {
    return fmt.Errorf("io.Copy: %v", err)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Muat naik fail terus ke Google Bucket menggunakan REST API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
lol
sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan