いくつかのファイルを圧縮してユーザーのデスクトップにダウンロードする次のコードがあります。
def download
info.find(params[:id])
if File.exists?("my_file.zip")
File.delete("my_file.zip")
end
zipfile = Zip::ZipFile.open("my_file.zip", Zip::ZipFile::CREATE)
file1 = "#{Rails.root}/tmp/myfile1.txt"
file2 = "#{Rails.root}/tmp/myfile2.txt"
File.open(file1, 'wb') { |file| file.write(info.first['my_file1']) }
File.open(file2, 'wb') { |file| file.write(info.first['my_file2']) }
zipfile.add("myfile1.txt", file1)
zipfile.add("myfile2.txt", file2)
zipfile.close
File.delete(file1)
File.delete(file2)
send_data zipfile, :type => 'application/zip', :filename => "test.zip"
end
このコードは、ファイルを圧縮してユーザーのコンピューターにダウンロードしているようです。しかし、それを開こうとすると、次のエラーがスローされます。
the archive is in unknown format or damaged
サーバーに sftp して同じソフトウェアで zip ファイルを開くと、問題なく動作し、すべてのファイルが表示されるため、ファイルが破損しているとは思いません。
間違っているのは次の行でしょうか?
send_data zipfile, :type => 'application/zip', :filename => "test.zip"