【问题标题】:How to delete an object in an S3 Bucket when file has been deleted locally in PHP在 PHP 中本地删除文件时如何删除 S3 存储桶中的对象
【发布时间】:2021-12-16 17:27:05
【问题描述】:

我正在尝试实现一项功能,该功能有助于通过单击我网站上的按钮来删除我的 s3 存储桶中的对象。到目前为止,我已经能够成功实现文件的上传,但是使用 AWS SDK for php 删除它们似乎是不可能的。以下是我已经实现的。

<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

class Delete{
function deleteS3object(string $bucketname, string $keyfilename){

   $bucket = $bucketname;
   $keyname = $keyfilename;
   
   $s3 = new S3Client([
       'version' => 'latest',
       'region'  => 'us-east-2'
   ]);
   
   // 1. Delete the object from the bucket.
   try
   {
       echo 'Attempting to delete ' . $keyname . '...' . PHP_EOL;
   
       $result = $s3->deleteObject([
           'Bucket' => $bucket,
           'Key'    => $keyname
       ]);
   
       if ($result['DeleteMarker'])
       {
           echo $keyname . ' was deleted or does not exist.' . PHP_EOL;
       } else {
           exit('Error: ' . $keyname . ' was not deleted.' . PHP_EOL);
       }
   }
   catch (S3Exception $e) {
       exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);
   }
   
   // 2. Check to see if the object was deleted.
   try
   {
       echo 'Checking to see if ' . $keyname . ' still exists...' . PHP_EOL;
   
       $result = $s3->getObject([
           'Bucket' => $bucket,
           'Key'    => $keyname
       ]);
   
       echo 'Error: ' . $keyname . ' still exists.';
   }
   catch (S3Exception $e) {
       exit($e->getAwsErrorMessage());
   } 
   
   return;
}
}

$x =  new Delete();
$success = $x->deleteS3object('bucketname', 'file.png') ? 'deleted': 'Error';
echo $success;
?>

但它为我返回 500 错误通知,有什么可能做错了吗?

【问题讨论】:

    标签: php amazon-s3 aws-sdk


    【解决方案1】:

    我想我现在明白我的错误是什么,在 S3Client 初始化中,我未能提供必要的凭据,即

    key 和 secret_key

    ,所以我添加了这些行,它工作得很好。下面是一个可行的解决方案。

    <?php
    
    require 'vendor/autoload.php';
    
    use Aws\S3\S3Client;
    use Aws\S3\Exception\S3Exception;
    
    class Delete{
    function deleteS3object(string $bucketname, string $keyfilename){
    
       $bucket = $bucketname;
       $keyname = $keyfilename;
       
       $s3 = new S3Client([
          'region'  => 'us-east-2',
          'version' => 'latest',
          'credentials' => [
             'key'    => "key",
             'secret' => "secretkey",
          ]
       ]);
       
       // 1. Delete the object from the bucket.
       try
       {
           echo 'Attempting to delete ' . $keyname . '...' . PHP_EOL;
       
           $result = $s3->deleteObject([
               'Bucket' => $bucket,
               'Key'    => $keyname
           ]);
       
           if ($result['DeleteMarker'])
           {
               echo $keyname . ' was deleted or does not exist.' . PHP_EOL;
           } else {
               exit('Error: ' . $keyname . ' was not deleted.' . PHP_EOL);
           }
       }
       catch (S3Exception $e) {
           exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);
       }
       
       // 2. Check to see if the object was deleted.
       try
       {
           echo 'Checking to see if ' . $keyname . ' still exists...' . PHP_EOL;
       
           $result = $s3->getObject([
               'Bucket' => $bucket,
               'Key'    => $keyname
           ]);
       
           echo 'Error: ' . $keyname . ' still exists.';
       }
       catch (S3Exception $e) {
           exit($e->getAwsErrorMessage());
       } 
       
       return;
    }
    }
    
    $x =  new Delete();
    $success = $x->deleteS3object('bucketname', 'file.png') ? 'deleted': 'Error';
    echo $success;
    ?>
    

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 2010-10-16
      • 2018-05-16
      • 2013-08-23
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      相关资源
      最近更新 更多