簡體   English   中英

AWS PHP SDK上傳文件導致S3混亂

[英]AWS PHP SDK upload file to S3 confusing errors

好的,所以我嘗試了幾種獲取文件上傳到我的S3帳戶的方法。 終於發現自己得到了某個地方和BOOM - 令人困惑的文檔和奇怪的錯誤信息似乎與自己相矛盾。

好吧,首先我不使用作曲家或類似的東西,我這樣做是老式的:

require '/path/to/aws-autoload.php';

現在這個加載正確,我已經減少了自動加載只使用Common和S3類 - 不需要一切!

接下來我加載S3 Client和Credentials:

use Aws\S3\S3Client;
use Aws\Common\Credentials\Credentials;

現在啟動魔術的代碼:

$file = '/path/to/' . $filename;
$credentials = new Credentials('KEY', 'SECRET KEY');
$s3 = S3Client::factory(array('credentials' => $credentials));

try{
$s3->putObject(array(
    'Bucket' => 'sub.domain.com.s3.amazonaws.com',
    'Body'   => fopen($file, 'r'),
    'ACL'    => 'public-read',
));
} catch (S3Exception $e) {
     $result = array(
         'ok' => false,
         'descr' => 'There was an error uploading the file to S3 : ' . $filename
     );
}

我似乎遇到的問題是“Bucket”本身。

當我將Bucket格式化為sub.domain.com時,我從AWS API返回以下消息:

AWS錯誤消息:您嘗試訪問的存儲區必須使用指定的端點進行尋址。 請將以后的所有請求發送到此端點:“sub.domain.com.s3.amazonaws.com”。

現在當我改變'Bucket'以匹配上面的內容時: sub.domain.com.s3.amazonaws.com

我收到以下錯誤消息:

AWS錯誤消息:指定的存儲桶不存在

難道我做錯了什么? 缺少什么? 遺憾的是,AWS文檔並不是最新的。 API目前似乎自相矛盾。 我知道所有的密鑰都是正確的,並且所有權限都是正確的。 它從301 - Redirect變為404 - Not Found from its advice。

任何幫助/建議將不勝感激。 我覺得我在這里走了一圈!

這里有一些要仔細檢查的事情。

  1. 如果桶是在某個區域(例如,us-west-2)中創建的, S3Client使用該區域[..., 'region' => 'us-west-2', ...]實例化S3Client
  2. 'Bucket'參數應設置為您的存儲桶的名稱(例如,如果您的存儲桶名為“sub.domain.com”),則'Bucket'參數應設置為'sub.domain.com' 不要在'Bucket'參數中包含該區域或“s3.amazonaws.com”(即bucket!= endpoint)。 SDK自動確定端點(基於客戶端的區域和提供的存儲桶名稱),並根據需要調整路徑樣式的URL。
  3. PutObject操作需要'Key'參數,該參數在上面的代碼示例中不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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