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寶石。我一定會試一試。但目前的應用程序已經在大量使用它。 –