检索AWS S3(v 2.4.4)中某个文件夹中的文件列表并删除它们

时间:2016-08-02 07:21:19

标签: ruby-on-rails ruby amazon-web-services amazon-s3

我正在制作Angular / Rails应用程序,并将Rails从4.2.x升级到5.0.0,将AWS-SDK从1.6.x升级到2.4.4。

1)我以前使用以下语法从AWS S3存储桶中的某个路径检索文件:

@files = @bucket.objects.with_prefix("path/to/folder")

将AWS升级到2.4.4版后,它说

(undefined method `with_prefix' for #<Aws::Resources::Collection:______>

我阅读了新文档并找到了bucket.objects(prefix: '/tmp-files/'),但这对我的app并不起作用ArgumentError (wrong number of arguments (given 1, expected 0))

2)假设我需要删除路径sample.pdf中的文件名sample/pdf/。我正在做@bucket.objects['sample/pdf/sample.pdf']而没有工作。这种语法有问题吗?

2 个答案:

答案 0 :(得分:1)

您有语法错误,选项需要是哈希。你的命令应该是:

bucket.objects({prefix: '/tmp-files/'})

有关更多选项,请参阅文档:http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Bucket.html#objects-instance_method

答案 1 :(得分:0)

试试这个

var walkAll=function(options){
    var x=0
    walk(options.dir,function(){})
    function walk(dir,callback) {
      var files=fs.readdirSync(dir);
      var stat;
      async.eachSeries(files,function(file,next){
        file=dir +'/' + file
        if (dir.match(/Recycle/)) return next() 
        if (dir.match(/.git/)) return next() 
        if (dir.match(/node_modules/)) return next() 
        fs.lstat(file,function(err,stat){
            if(err) return next()
            if(stat.mode==41398) return next()
            if (stat.isDirectory()) {
                setTimeout(function(file){
                    walk(file,next)
                }.bind(null,file),5)
            }
            else{
                x++
                if(false || x % 1000===0) console.log((new Date().valueOf()-start)/1000,x,file)
                next()
            }
        })
      },function(){
        callback()
      })
    }
}

walkAll({
    dir:'c:/',
    delay:1000
});

Here是相同的官方文档。