【发布时间】:2013-09-25 08:15:57
【问题描述】:
在使用 AWS 开发工具包 PHP v2 将文件上传到 Amazon S3 时,我在设置“元数据”选项时遇到问题。 upload() 方法的 documentation that I'm reading 声明第 5 个参数是一个选项数组...
*$options 执行命令时使用的自定义选项: - 参数:自定义 与上传一起使用的参数。 参数必须映射到 PutObject 或 InitiateMultipartUpload 操作参数。 - min_part_size:允许每个上传部分的最小大小 执行分段上传。 - 并发:最大数量 并发分段上传。 - before_upload:回调调用 在每次分段上传之前。回调将收到一个 带有上下文的 Guzzle\Common\Event 对象。*
我的upload() 代码如下所示..
$upload = $client->upload(
'<BUCKETNAME>',
'metadatatest.upload.jpg',
fopen('metadatatest.jpg','r'),
'public-read',
array('Metadata' => array(
'SomeKeyString' => 'SomeValueString'
))
);
...上传后没有设置元数据。
如果我使用putObject()as documented here,我认为与upload()相比,这是一种“较低级别”的方法...
$putObject = $client->putObject(
array(
'Bucket' => '<BUCKETNAME>',
'Key' => 'metadatatest.putobject.jpg',
'Body' => file_get_contents('metadatatest.jpg'),
'ACL' => 'public-read',
'Metadata' => array(
'SomeKeyString' => 'SomeValueString'
)
)
);
当我调用getObject()或使用putObject()上传时直接在浏览器中查看文件时,元数据成功返回
$getObject = $client->getObject(
array(
'Bucket' => '<BUCKETNAME>',
'Key' => 'metadatatest.putobject.jpg'
)
);
我更喜欢使用 $client->upload() 方法作为文档说明
将文件、流或字符串上传到存储桶。如果上传大小超过指定阈值,将使用 并行分段上传。
我不确定我错过了什么?
【问题讨论】:
-
这似乎是一个错误。请在github.com/aws/aws-sdk-php/issues 报告。我还要提到您正在上传的对象的大小,因为这可能只是分段上传的问题。
-
@JeremyLindblom 干杯我会试一试这条大道,文件很小,
putObject()处理得很好。 -
@JeremyLindblom 这不是真正的代码错误,而是该方法的文档编写方式的问题。在查看实际源代码之前,我还发现它令人困惑。也许你们可以通过一些可以澄清事情的例子来改进它。
-
@dcro 啊,我明白这有多令人困惑。注意!
标签: php file-upload amazon-web-services amazon-s3