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

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

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

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

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

Q&A

解決済

2回答

2238閲覧

S3(AWS)上にある対象のバケットへのpathを取得する方法

renren643

総合スコア279

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2018/11/01 01:56

ブラウザ上からzipファイルをアップし、S3に保存し,ファイル展開をしたいです。(rails+fog+CarrierWave使用)
(ローカルでは成功しています)

def create @account = Account.find(params[:account_id]) @item = @account.items.new(item_params) @item.csv = item_params[:csv] dest = @item.csv.hash.to_s + "/" Zip::File.open(@item.csv.current_path) do |zip| zip.each do |entry| zip.extract(entry, Rails.root.join('public/' + 'uploads') + dest + entry.name)#第一引数の解凍済みzipファイルを第二引数に保存 end end end

しかし、以下のようなエラーが出ます。
S3にtmpファイルはアップできています。
(展開するファイルの元となるuploads/tmp/1541036446-40117-0002-9261/exhibit.zipはS3にあります)

イメージ説明

S3を使わずに行なうと、pulic以下にuploadsフォルダが作成されるのですが、

このエラーはローカルのpublic以下に保存されるはずのuploads/tmp/1541036446-40117-0002-9261/exhibit.zipがないから出ているエラーで、

@item.csv.current_pathの前になにかをつけてS3上にある対象のバケットへのpathを渡せば解決するのではないかと思うのですが、

controllerからS3上にある対象のバケットへのpath(この場合だと、自分のバケット名/uploads/tmp/1541036446-40117-0002-9261/exhibit.zip)を取得する方法はありますか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

S3はファイルの入れ物(実際にはオブジェクト)なので、S3上でファイルを展開することはできません。

S3 Driveのようなものを利用し、ローカルドライブとして扱えるようになれば、
そのローカルドライブでZIP展開したものはS3に同期されて、S3上に展開できます。

投稿2018/11/03 14:07

moonphase

総合スコア6621

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

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

0

ありません。

AWS CLIなど、s3://から始まるパスを渡すとファイルのように扱えるプログラムがありますが、
それらは各々のプログラムがS3のパスを特別に解釈することで実現されているため、通常はできません。

ローカルにファイルが残っていない場合は、AWS SDKなどを利用してS3からダウンロードする必要があります。

投稿2018/11/02 15:20

lefb766

総合スコア66

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問