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>