質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

1000閲覧

AWS SDK for Ruby 存在チェック

aizawal-hiroki

総合スコア56

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2017/10/12 06:33

aws sdk rubyでファイルの存在チェックをしようとしています。

list_objectsでディレクトリの中にあるファイルの一覧を取得しFile.exist?で該当のファイルがあったら削除そうでないならexitというものを作りたいのですがFile.exist?がうまくいかず該当のファイルが見つかりませんとなります。どう修正すればよろしいでしょうか。

ruby

1require 'aws-sdk-core' 2require 'aws-sdk' 3require 'json' 4require "digest/md5" 5 6def test_bucket 7$s3 = Aws::S3::Client.new( 8 :region => 'ap-northeast-1', 9 :access_key_id => '*************', 10 :secret_access_key => '**********************************', 11 ) 12end 13 14# 正常終了すれば true が返る 15def delete_file(object_name, target_file) 16 ARGV.each_with_index do |arg, i| 17 puts "ARGV[#{i}]:#{arg}" 18 end 19 20 $siteid = ARGV[0] 21 $contentsid = ARGV[1] 22 $filename = ARGV[2] 23 24 unless $siteid =~ /[^\w]/ 25 puts "ok" 26 else 27 puts "ng" 28 exit 29 end 30 31 unless $contentsid =~ /[^\d]/ 32 puts "ok!" 33 else 34 puts "ng!" 35 exit 36 end 37 38 unless $filename =~ /[^\w.]/ 39 puts "ok!!" 40 else 41 puts "ng!!" 42 exit 43 end 44 45 46# puts $siteid 47# puts $contentsid 48# puts $filename 49 50 $contentsfolder = (($contentsid.to_i / 100).floor + 1)*100 51 52# puts $contentsfolder 53 54 $contentsfolder2 = $contentsid+(Digest::MD5.hexdigest($contentsid + "scdci" + $siteid )[0...10]) 55 56# puts $contentsfolder2 57 58 59# test_bucket.delete_object({ 60# bucket: "aizawatest", 61# key: "apfiles/#{$siteid}/contents/#{$contentsfolder}/#{$contentsfolder2}/#{$filename}/", 62# }) 63#end 64 65 test_bucket.list_objects(:bucket => 'test' , 66 :prefix => "apfiles/#{$siteid}/contents/#{$contentsfolder}/#{$contentsfolder2}").contents.each do |object| 67 #puts "#{object.key} => #{object.etag}" 68 puts File.basename("#{object.key}") 69 70 if File.exist?("apfiles/#{$siteid}/contents/#{$contentsfolder}/#{$contentsfolder2}/#{$filename}") 71 # ファイルがある場合 72 puts "ファイル" + $filename + "が存在します" 73 else 74 # ファイルがない場合 75 puts "ファイル" + $filename + "が存在しません" 76 exit 77 end 78 79 end 80 81 82 test_bucket.delete_object({ 83 bucket: "test", 84 key: "apfiles/#{$siteid}/contents/#{$contentsfolder}/#{$contentsfolder2}/#{$filename}", 85 }) 86end 87 88 89 90 91 92if delete_file('delete_file', 'delete_file') # => true/false 93 puts '削除完了' 94else 95 puts '削除失敗' 96end 97 98 99#end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gouf

2017/10/12 09:13

変数名の先頭に「$」を付けると、グローバル変数としてどこからでも参照・更新できるようになります。しかし、可読性を著しく下げる原因にもなります。可能であればグローバル変数を使用しないコードを提示していただけますでしょうか
guest

回答1

0

AWSを使っていないので推測になりますが、File.exist?は使えないため

bucket.objects(file).exists?

を使うようです。

参考リンクを貼っておきます。
https://gist.github.com/hartfordfive/19097441d3803d9aa75ffe5ecf0696da

投稿2017/10/15 18:26

ironsand

総合スコア91

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問