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) } }
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?
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() // ... }
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) }
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!