Post上传对象

NewPresignedPost接口为一个指定对象生成一个支持post方式上传文件的参数集合,可以在前端使用post form-data的方式上传文件。NewPresignedPost方法请查看Go SDK Demo

func (p *S3Demo) generatePresignedPost() {
    key := "ExampleObject.txt"
    expire := 3600
    cred := &Credentials{
        EndPoint:        S3EndPoint,
        Region:          "cn",
        AccessKeyID:     S3AccessKey,
        SecretAccessKey: S3SecretKey,
    }
    policy := NewPostObjectPolicy(expire)
    post, err := NewPresignedPost(cred, S3Bucket, key, policy)
    fmt.Println(policy.String())
    if err != nil {
        fmt.Println("err, ", err)
        return
    }
    fmt.Printf("success, %+v\n", post)
}

参数如下:

参数 类型 说明 是否必要
bucket 字符串 bucket的名称
key 字符串 对象的key
expire 整型数 超时时间(秒)

前端使用方式如下:

<form action="<data.url>" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="Policy" value="<data.fields["Policy"]>" />
    <input type="hidden" name="X-Amz-Algorithm" value="<data.fields["X-Amz-Algorithm"]>" />
    <input type="hidden" name="X-Amz-Credential" value="<data.fields["X-Amz-Credential"]>" />
    <input type="hidden" name="X-Amz-Date" value="<data.fields["X-Amz-Date"]>" />
    <input type="hidden" name="X-Amz-Signature" value="<data.fields["X-Amz-Signature"]>" />
    <input type="hidden" name="key" value="<data.fields["key"]>" />

    <input type="file" name="file" value="" />
    <input type="submit" value="Submit" />
</form>