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>