[英]Amazon S3 setting metadata fails using AWS SDK PHP v2 upload()
使用AWS開發工具包PHP v2將文件上傳到Amazon S3時,設置“元數據”選項時遇到問題。 我正在閱讀的upload()方法的文檔指出第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()
,那么我認為它是與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()
方法作為文檔說明
將文件,流或字符串上傳到存儲桶。 如果上傳大小超過指定的閾值,將使用並行分段上傳執行上傳。
我不確定我錯過了什么?
如果您不進行分段上傳,則使用upload()
或putObject()
確實沒有區別。 您可以看一下AWS PHP SDK源代碼,但基本上, upload
方法只是這樣調用putObject
:
// Perform a simple PutObject operation
return $this->putObject(array(
'Bucket' => $bucket,
'Key' => $key,
'Body' => $body,
'ACL' => $acl
) + $options['params']);
在SDK文檔中這不是很清楚,但是您需要將最后一個參數作為帶有鍵params
的數組發送,並將其值作為帶有Metadata
鍵和值的第二個數組發送,如下所示:
$upload = $client->upload(
'<BUCKETNAME>',
'metadatatest.upload.jpg',
fopen('metadatatest.jpg','r'),
'public-read',
array('params' => array(
'Metadata' => array(
'SomeKeyString' => 'SomeValueString'
)))
);
但是,我可以只使用putObject調用來實現相同的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.