> 백엔드 개발 > Golang > Go를 사용하여 AWS S3에 미리 서명된 POST 업로드를 수행하는 방법은 무엇입니까?

Go를 사용하여 AWS S3에 미리 서명된 POST 업로드를 수행하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-23 01:01:14
원래의
416명이 탐색했습니다.

How to Perform a Pre-signed POST Upload to AWS S3 using Go?

Go에서 AWS S3에 사전 서명된 POST 업로드 수행

이 가이드에서는 사전 서명된 POST 수행의 세부 사항을 살펴보겠습니다. -Go를 사용하여 AWS S3 버킷에 서명된 POST 업로드. 이 접근 방식은 PUT과 관련된 보다 일반적인 사전 서명된 업로드 메커니즘과 다릅니다.

전제 조건:

  1. 다음을 설정하여 공개 다운로드 액세스를 허용하도록 S3 버킷을 구성합니다. 적절한 버킷 정책.
  2. 버킷, 키, 만료를 지정하여 파일 업로드를 허용하는 POST 정책을 구성합니다. 시간, ACL(액세스 제어 목록) 및 기타 필수 매개변수.
  3. S3 버킷 소유자의 자격 증명을 사용하여 POST 정책을 생성하고 서명합니다. 여기에는 base64 인코딩, HMAC-SHA256 해시 계산 및 16진수 인코딩이 포함됩니다.

다중 부분 양식 데이터 구성 및 POST 요청:

업로드를 시작하려면 준비하세요. 서명된 정책 문서, 키 및 파일 콘텐츠를 포함하여 정책에 지정된 모든 필드를 포함하는 다중 부분 양식 데이터 요청입니다. 멀티파트 패키지의 CreateFormField 메서드를 사용하여 각 양식 필드를 생성합니다.

코드 예:

다음은 프로세스를 간략하게 설명하는 Go 코드 조각입니다.

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
}
로그인 후 복사

이 단계를 따르면 사전 서명된 POST를 사용하여 AWS S3 버킷에 파일을 원활하게 업로드할 수 있습니다. Go의 메서드입니다.

위 내용은 Go를 사용하여 AWS S3에 미리 서명된 POST 업로드를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿