2

我想检查是否利用内幕on Rails应用程序的红宝石AWS-SDK宝石(第2版)在AWS S3存在一个特定的PDF文件AWS S3路径上存在。检查文件是否使用AWS-SDK宝石

我有AWS连接建立和目前使用exists?方法:

puts @bucket.objects(prefix:"path/sample_100.pdf").exists?

上运行上面的语句,我得到下面没有方法错误:

undefined method 'exists?' for Aws::Resources::Collection

经过几个文件,但没有太大的帮助。有没有其他办法可以达到同样的效果。

在此先感谢

+0

布鲁诺的答案也许是最好的答案,如果你想检查,如果您的应用程序之外的文件是否存在。然而,如果文件被上传从您的应用程序(使用回形针,carrierwave,神社..)上传的文件是应用程序的一部分,它在你的应用程序的数据库,这是很容易检查。 – Maxence

+0

@Maxence感谢您的意见。我想出了解决方案。我正在搜索的PDF文件存储在AWS S3水桶和应用程序正在使用AWS **-SDK宝石**(https://github.com/aws/aws-sdk-ruby)执行任何此类行动。 –

回答

0

我自己不是Ruby开发人员,但我可能能够提出建议。

通常的方式来检查在亚马逊S3中是否存在对象正在使用的HEAD Object操作。基本上,它会返回对象的元数据(但不包含内容)(如果存在),如果不存在则返回404错误。它就像GET对象,但没有对象的内容。

我只是在AWS SDK为Ruby API参考抬头一看,发现这个方法:

http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#head_object-instance_method

看看那个,这可能是你在找什么。

+1

非常感谢你的洞察力。我基本上是试图在AWS S3存储桶上搜索PDF文件,如果存在,然后对其执行进一步的操作。 **存在?**方法为我工作。 我刚把aws文件路径放在一个变量中,然后调用它的exists方法。这在执行时返回true。 'file = “文件路径/ sample_100.pdf”''@ bucket.objects(文件).exists?' –

1

我建议你使用更简单的S3宝石:https://github.com/qoobaa/s3如果你只需要处理S3。你就可以做这种方式:

object = bucket.objects.find("example.pdf")

+0

谢谢@ CV-门的替代S3宝石。我一定会试一试。但目前的应用程序已经在大量使用它。 –