미리 서명된 POST 업로드를 통해 승인되지 않은 사용자가 안전하게 업로드할 수 있습니다. 파일을 S3 버킷에 저장합니다. 사전 서명된 PUT와 달리 이 방법은 정책 기반 승인을 사용하며 파일 전송을 단순화합니다.
1. S3 버킷에 대한 공개 읽기 액세스 구성:
공개 읽기 액세스를 활성화하려면 다음 버킷 정책을 설정합니다.
{ "Version": "2012-10-17", "Id": "akjsdhakshfjlashdf", "Statement": [ { "Sid": "kjahsdkajhsdkjasda", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKETNAMEHERE/*" } ] }
2. POST 정책 생성:
POST 정책 템플릿을 생성하고 주요 필드(만료, 버킷, 키, 자격 증명, 날짜)를 입력하고 인코딩합니다.
{ "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. 정책에 서명:
S3 버킷 소유자의 자격 증명을 사용하여 서명을 생성합니다.
4. 멀티파트 양식 데이터 구성:
멀티파트 양식 데이터에 모든 정책 매개변수 포함:
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 }
위 내용은 Go에서 AWS S3에 미리 서명된 POST 업로드를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!