Muat naik POST pra-tandatangan membenarkan pengguna yang tidak dibenarkan memuat naik dengan selamat fail ke baldi S3. Tidak seperti PUT yang ditandatangani sebelumnya, kaedah ini bergantung pada kebenaran berasaskan dasar dan memudahkan pemindahan fail.
1. Konfigurasikan Akses Baca Awam untuk Baldi S3:
Tetapkan dasar baldi berikut untuk mendayakan akses baca awam:
{ "Version": "2012-10-17", "Id": "akjsdhakshfjlashdf", "Statement": [ { "Sid": "kjahsdkajhsdkjasda", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKETNAMEHERE/*" } ] }
2. Jana Dasar POST:
Buat templat dasar POST, isikan medan utama (tamat tempoh, baldi, kunci, bukti kelayakan, tarikh) dan kodkannya:
{ "expiration": "%s", "conditions": [ {"bucket": "%s"}, ["starts-with", "$key", "%s"], {"acl": "public-read"}, {"x-amz-credential": "%s"}, {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, {"x-amz-date": "%s" } ] }
3. Tandatangan Polisi:
Gunakan kelayakan pemilik baldi S3 untuk menjana tandatangan:
4. Bina Data Borang Berbilang Bahagian:
Sertakan semua parameter dasar dalam data borang berbilang bahagian:
func Upload(url string, fields Fields) error { var b bytes.Buffer w := multipart.NewWriter(&b) for _, f := range fields { fw, err := w.CreateFormField(f.Key) if err != nil { return err } if _, err := fw.Write([]byte(f.Value)); err != nil { return err } } w.Close() req, err := http.NewRequest("POST", url, &b) if err != nil { return err } req.Header.Set("Content-Type", w.FormDataContentType()) client := &http.Client{} res, err := client.Do(req) if err != nil { return err } if res.StatusCode != http.StatusOK { err = fmt.Errorf("bad status: %s", res.Status) } return nil }
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Muat Naik POST Pra-tandatangan ke AWS S3 dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!