ruby on rails发送数据时,归档文件的格式未知或出现损坏错误



我有以下代码来压缩一些文件并将其下载到用户桌面:

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"

看起来像是在发送zipfile对象,send_data方法发送给定对象中包含的二进制数据。所以它可能只是发送数据zipfile.to_s

send_file可能就是你想要的,像这样:

send_file 'my_file.zip', type: 'application/zip', filename: 'test.zip'

相关内容

  • 没有找到相关文章

最新更新