簡體   English   中英

使用AWS開發工具包PHP v2 upload()的Amazon S3設置元數據失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM