删除多个对象Amazon s3 PHP SDK

乔丹·科曼

我在一次删除多个对象时遇到了问题。

使用这个库-https ://github.com/aws/aws-sdk-php-laravel-使用该库的其他任何东西(放置,获取,删除单个对象等)都没有问题

try {
        $s3 = AWS::get('s3');
        $s3->deleteObjects(array(
            'Bucket'  => $bucket,
            'Objects' => $json['attachmentArray']
        ));
        return "Success deleting files.";
    } catch (S3Exception $e) {
        return "There was an error.\n";
    }

deleteObjects Amazon Docs- http: //docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingPHPSDK.html

我返回了"Success deleting files.";,但是文件没有被删除。

我的存储桶名称是正确的,并且$json['attachmentArray']根据文档显示格式正确(再次,我在放置,获取,删除等其他区域都没有问题)

有人可以指出我在搞砸吗?谢谢。

编辑:

尝试提供更多信息:

我正在从Angular函数向Laravel端点发布信息。

这是Angular函数(隐藏了Firebase URL):

$scope.deleteFile = function() {

  var r=confirm("Are you sure you want to delete this task & of it's all attachments?");
  if (r==true)
    {
      var attachmentArray = [];

      var atttachData = new Firebase('https://*.firebaseio.com/attachments');
        atttachData.on('value', function(dataSnapshot) {  
           dataSnapshot.forEach(function(childSnapshot) {
            var key   = childSnapshot.val().key;
            // attachmentArray.push(key); I tried this
               attachmentArray.push({Key:key});

            });
           });
                method: "POST",
                url: '/delete_task',
                data: {attachmentArray:attachmentArray},
                headers: {'Content-Type': 'application/json'},
           }).success(function(data){
              console.log(data);
           });
    } 
}

这是我试图创建deleteObjects的Laravel控制器(使用@Kevin Florida的更新代码:

 public function delete_task() {
    $request = Request::instance();
    $task = $request->getContent(); 
    $json = json_decode($task, TRUE); 
    $bucket ='bucketname/team1';

    // return $json['attachmentArray'];
    $s3 = AWS::get('s3');
    if(!$s3->deleteObjects(array(
                'Bucket'  => $bucket,
                'Objects' => $json['attachmentArray']
            ))) {
     return "error";
    } else {
     return "success";
    }
}

现在,这将返回500服务器错误。我想格式$json['attachmentArray'];不正确吗?没有把握 ;/

编辑2:

角度功能

$scope.deleteFile = function() {

  var r=confirm("Are you sure you want to delete this task & of it's all attachments?");
  if (r==true)
    {
      var attachmentArray = [];

      var atttachData = new Firebase('https://***/attachments');
        atttachData.on('value', function(dataSnapshot) {  
           dataSnapshot.forEach(function(childSnapshot) {
            var url   = childSnapshot.val().url;
            var name  = childSnapshot.val().name;
            var id    = childSnapshot.val().id;
            var key   = childSnapshot.val().key;              
            attachmentArray.push(key);
            });
           });
      $http({
                method: "POST",
                url: '/delete_task',
                data: {team:$scope.team,attachmentArray:attachmentArray,lastSegment:lastSegment},
                headers: {'Content-Type': 'application/json'},
           }).success(function(data){
              console.log(data);
           });          
    } 
}

Laravel控制器

public function delete_task() {
    $s3 = AWS::get('s3');
    $task = Input::all();
    $bucket ='teamite/team'.$task['team'];

    //make the array for Objects on this side
    foreach ($task['attachmentArray'] as $value) {
        $array[] = array('Key' => $value);
      }
     // return $task['attachmentArray'][0];

      $result = $s3->deleteObjects(array(
          'Bucket' => 'teamite/team1',
          'Objects' => $array
      ));

      return $result;
}

然后,我在亚马逊的控制台中记录了以下响应:

=====================
Debug output of model
=====================

Model data
-----------

This data can be retrieved from the model object using the get() method of the model   (e.g. $model->get($key)) or accessing the model like an associative array (e.g. $model['key']).

[Deleted] => Array
    (
        [0] => Array
            (
                [Key] => 4700pzgds4i_ad.jpg
            )

        [1] => Array
            (
                [Key] => xxvu29ms4i_ad.jpg
            )

    )

[RequestId] => 477F0DA04101D82E

因此,它现在似乎可以正常工作。.但是,这些对象没有被删除吗?我还做错了什么?疯了这个!

杰里米·林德布鲁姆(Jeremy Lindblom)

实际上看起来您没有正确引用文件(S3对象)。请求的格式很好,但是存储桶名称和键可能是错误的。

看着:

$bucket = 'teamite/team'.$task['team'];

您的存储桶是“ teamite / team1”还是“ teamite”?请记住,S3具有平坦的结构。没有“子桶”。如果您将内容布置在嵌套的文件结构中,则必须将路径或伪文件夹作为密钥的一部分包括在内。

例如,在这个虚构的URL中,它指向S3中的一个对象: http://s3.amazonaws.com/all-of-my-things/photos/2013/12/photo0005.jpg

桶是all-of-my-things,钥匙是photos/2013/12/photo0005.jpg

deleteObjects()由于S3操作的幂等性质,您正在进行呼叫已成功返回。如果多次删除对象,则每次都会成功返回。您在这里看到的是您正在使用错误的键删除对象。这些键不存在,因此已被删除。

希望这会有所帮助。直接使用SDK对象时,不要害怕在模块的问题跟踪器上或直接在SDK的问题跟踪器上解决此类问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除多个对象Amazon s3 PHP SDK

来自分类Dev

Amazon S3 .net SDK-在一个请求中删除多个对象

来自分类Dev

使用PHP SDK在Amazon S3上上传文件

来自分类Dev

Amazon S3客户使用PHP SDK提供的加密

来自分类Dev

Amazon S3 SDK for PHP中的异常处理

来自分类Dev

使用PHP SDK在Amazon S3上上传文件

来自分类Dev

Amazon S3客户使用PHP SDK提供的加密

来自分类Dev

AWS S3无法通过PHP SDK删除存储桶中的对象

来自分类Dev

使用PHP SDK在Amazon S3上上传已调整大小的图像

来自分类Dev

Amazon S3 PHP SDK:上载的图像具有错误的mime类型

来自分类Dev

使用 PHP 将文件上传到 Amazon S3 存储桶 - 不使用 SDK

来自分类Dev

Amazon S3 Java SDK多个文件上传

来自分类Dev

从PHP AWS SDK设置S3对象的缓存控制HTTP标头

来自分类Dev

带有Amazon S3 PHP SDK v3的Google存储不正确的授权标头

来自分类Dev

在Amazon AWS PHP SDK中为S3客户端设置适当的终端节点

来自分类Dev

使用PHP SDK列出AWS S3存储桶

来自分类Dev

AWS PHP SDK S3 RequestTimeTooSkewed错误

来自分类Dev

Listing AWS S3 buckets using the PHP SDK

来自分类Dev

使用AWS PHP SDK访问Swisscom S3服务

来自分类Dev

清除AWS s3 php亚马逊sdk上的缓存

来自分类Dev

没有sdk的php s3预签名网址

来自分类Dev

通过 amazon s3 sdk for javascript 访问 IAM 角色 S3 存储桶图像

来自分类Dev

图片上传Amazon S3 android SDK 2.0

来自分类Dev

Amazon S3签名不匹配-AWS SDK Java

来自分类Dev

使用 php Yii2 在 Amazon S3 中删除对象(单个图像)不起作用?

来自分类Dev

ruby aws sdk s3删除文件夹中的对象

来自分类Dev

将PutObject放入目录Amazon s3 / PHP

来自分类Dev

使用PHP从Amazon s3压缩并下载文件

来自分类Dev

Ruby Amazon S3 SDK是否使用SSLv3?

Related 相关文章

热门标签

归档