3

CDN が構成されたデジタル オーシャン スペースのセットアップがあります。ファイルがアップロードされ、Transmit でパブリックに設定されているため、CDN 構成が機能していることはわかっています。CMS でファイルをアップロードして公開しようとしています。

このSDKを使用してから、S3 SDK を直接使用してみましたが、これまでのところ、アップロード後にファイルのプライバシーを公開に設定することも、スペース (バケット) のプライバシーを公開に変更することもできませんでした。

ファイルのプライバシーをパブリックに設定しようとすると、ファイルが正常にアップロードされ、パスが正しいにもかかわらず、常に 404 が返されます (ファイルは Spaces ダッシュボードで確認できます)。スペースを public に設定してもエラーは発生しませんが、その中のディレクトリやファイルには影響がないようです。

私が使用しているコードは次のとおりです。

$client = new Aws\S3\S3Client([
  'version' => 'latest',
  'region'  => 'us-east-1',
  'endpoint' => getenv('storage.region'),
  'credentials' => [
    'key'    => getenv('storage.access_key'),
    'secret' => getenv('storage.secret_key'),
  ]
]);

$client->uploadDirectory($filePath, "XX", $dirName); // successful
$client->putBucketAcl(["Bucket" => "XX", "ACL" => 'public-read']); // no error, but no effect on space

foreach (new DirectoryIterator($filePath) as $file) {
  if($file->isDot()) continue;
  $client->putObjectAcl(["Bucket" => "XX", "Key" => $dirname . $file->getFilename(), "ACL" => "public-read"]); // always returns 404
}

返される正確な 404 エラーは次のとおりです。

Error executing "PutObjectAcl" on "https://xx.nyc3.digitaloceanspaces.com//media/pages/journal/11-27-2020/2478608562-1607828382/m6-79-28-38x.jpg?acl"; AWS HTTP error: Client error: 'PUT https://xx.nyc3.digitaloceanspaces.com//media/pages/journal/11-27-2020/2478608562-1607828382/m6-79-28-38x.jpg?acl' resulted in a 404 Not Found response:

<?xml version="1.0" encoding="UTF-8"?>
  <Error>
    <Code>NoSuchKey</Code>
    <BucketName>xx</BucketName>
    <RequestId>tx000000000 (truncated...) NoSuchKey (client): - 
<?xml version="1.0" encoding="UTF-8"?>
  <Error>
    <Code>NoSuchKey</Code>
    <BucketName>xx</BucketName>
    <RequestId>tx000000000000000d949ce-005fd5839f-2a11a58-nyc3c</RequestId>
    <HostId>abcd-abcd-abcd</HostId>
  </Error>

投稿された別の質問とは異なり、ファイル名にも使用されるパスにも特殊文字はありません。一例を次に示します。

https://xx.nyc3.digitaloceanspaces.com/media/pages/journal/11-27-2020/3551000373-1607742797/m6-75-29a-100x.jpg

4

0 に答える 0