質問: @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にあります) ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/7545c608dcb4f68440e451e6e3f89a7a.png) 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)を取得する方法はありますか?
回答: S3はファイルの入れ物(実際にはオブジェクト)なので、S3上でファイルを展開することはできません。 S3 Driveのようなものを利用し、ローカルドライブとして扱えるようになれば、 そのローカルドライブでZIP展開したものはS3に同期されて、S3上に展開できます。