Post上传对象
PostObjectV4接口为一个指定对象生成一个支持post方式上传文件的参数集合,可以在前端使用post form-data的方式上传文件。
public function postPresign() {
$objectName = "TestPostFile.txt";
$formInputs = ['acl' => 'public-read'];
$options = [
['acl' => 'public-read'],
['bucket' => $this->bucket],
['starts-with', '$key', $objectName],
];
$expires = '+2 hours';
$postObject = new \Aws\S3\PostObjectV4(
$this->s3Client,
$this->bucket,
$formInputs,
$options,
$expires
);
$formAttributes = $postObject->getFormAttributes();
$formInputs = $postObject->getFormInputs();
unset($formInputs["key"]);
return new PostPresignOut($formAttributes["action"], $objectName, $formInputs);
}
参数如下:
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | 字符串 | bucket的名称 | 是 |
Key | 字符串 | 对象的key | 是 |
expires | 整型数 | 超时时间(秒) | 是 |
formInputs | 数组 | 前端输入参数,用于配置acl,ContentType | 可以为空 |
options | 数组 | 参数策略,可以限制输入的参数,至少需要指定key | 是 |
前端使用方式如下:
<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="bucket" value="<data.fields["bucket"]>" />
<input type="hidden" name="key" value="<data.fields["key"]>" />
<input type="file" name="file" value="" />
<input type="submit" value="Submit" />
</form>