rubyzip を使用して通常の zip ファイルの内容を取得する方法を知っています。しかし、圧縮されたフォルダーの内容を解凍するのに問題がありました。どなたか助けていただければ幸いです。
これは私が解凍するために使用するコードです:
Zip::ZipFile::open(@file_location) do |zip|
zip.each do |entry|
next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file?
logger.debug "#{entry.name}"
@data = File.new("#{Rails.root.to_s}/tmp/#{entry.name}")
end
end
entry.name は、zip ファイル内のファイルの名前を教えてくれます。これは、通常の zip ファイルで完全に機能します。ただし、フォルダーから zip ファイルを作成すると、エントリの名前は test-folder/test.pdf のようになります。その後、ファイルを作成しようとすると、ファイルが見つからないことがわかります。これはおそらく、zip 内にある "test" フォルダー内にあるためです。
エントリがフォルダであることを確認すると、フォルダが見つかりません。したがって、解決策は、エントリをストリームとして読み取り、ファイルとして保存することだと思いました。エントリ ストリームを取得するのは簡単ですが、ファイルとして保存するにはどうすればよいですか? これは私がこれまでに得たものです。
Zip::ZipFile::open(@file_location) do |zip|
zip.each do |entry|
next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file?
logger.debug "#{entry.name}"
@data = entry.get_input_stream.read
# How do i create a file from a stream?
end
end
基本的に私の質問は、ストリームからファイルを作成するにはどうすればよいですか? それとも、私よりも簡単なアプローチがありますか?
===編集=== 私はクリップを使ってファイルを保存しています。