Rails 使用 send_data 或 send_file 将多个文件发送到浏览器
Rails send multiple files to browser using send_data or send_file
我正在尝试向浏览器发送多个文件。我不能像下面的代码那样为每条记录调用 send_data,因为我得到了双重渲染错误。根据 this post,我需要创建文件并将它们压缩,以便我可以在一个请求中发送它们。
@records.each do |r|
ActiveRecord::Base.include_root_in_json = true
@json = r.to_json
a = ActiveSupport::MessageEncryptor.new(Rails.application.config.secret_token)
@json_encrypted = a.encrypt_and_sign(@json)
send_data @json_encrypted, :filename => "#{r.name}.json" }
end
我正在为每条记录创建一个散列数组,其中包含 @json_encrypted
和 file_name
。我的问题是如何为每条记录创建一个文件,然后将它们打包成一个 zip 文件,然后将该 zip 文件传递给 send_file
。或者更好的是在屏幕上弹出多个文件下载对话框。每个文件一个。
file_data = []
@records.each do |r|
ActiveRecord::Base.include_root_in_json = true
@json = r.to_json
a = ActiveSupport::MessageEncryptor.new(Rails.application.config.secret_token)
@json_encrypted = a.encrypt_and_sign(@json)
file_data << { json_encrypted: @json_encrypted, filename: "#{r.name}.json" }
end
所以我遇到的问题是 send_file
没有响应 ajax 调用,这就是我发布到该操作的方式。我摆脱了 ajax,并通过 hidden_field_tag 发送必要的数据并使用 jquery 提交。下面的代码为数据创建文件,压缩它们,并将压缩文件传递给 send_data.
file_data.each do |hash|
hash.each do |key, value|
if key == :json_encrypted
@data = value
elsif key == :filename
@file_name = value
end
end
name = "#{Rails.root}/export_multiple/#{@file_name}"
File.open(name, "w+") {|f| f.write(@data)}
`zip -r export_selected "export_multiple/#{@file_name}"`
send_file "#{Rails.root}/export_selected.zip", type: "application/zip", disposition: 'attachment'
end
我正在尝试向浏览器发送多个文件。我不能像下面的代码那样为每条记录调用 send_data,因为我得到了双重渲染错误。根据 this post,我需要创建文件并将它们压缩,以便我可以在一个请求中发送它们。
@records.each do |r|
ActiveRecord::Base.include_root_in_json = true
@json = r.to_json
a = ActiveSupport::MessageEncryptor.new(Rails.application.config.secret_token)
@json_encrypted = a.encrypt_and_sign(@json)
send_data @json_encrypted, :filename => "#{r.name}.json" }
end
我正在为每条记录创建一个散列数组,其中包含 @json_encrypted
和 file_name
。我的问题是如何为每条记录创建一个文件,然后将它们打包成一个 zip 文件,然后将该 zip 文件传递给 send_file
。或者更好的是在屏幕上弹出多个文件下载对话框。每个文件一个。
file_data = []
@records.each do |r|
ActiveRecord::Base.include_root_in_json = true
@json = r.to_json
a = ActiveSupport::MessageEncryptor.new(Rails.application.config.secret_token)
@json_encrypted = a.encrypt_and_sign(@json)
file_data << { json_encrypted: @json_encrypted, filename: "#{r.name}.json" }
end
所以我遇到的问题是 send_file
没有响应 ajax 调用,这就是我发布到该操作的方式。我摆脱了 ajax,并通过 hidden_field_tag 发送必要的数据并使用 jquery 提交。下面的代码为数据创建文件,压缩它们,并将压缩文件传递给 send_data.
file_data.each do |hash|
hash.each do |key, value|
if key == :json_encrypted
@data = value
elsif key == :filename
@file_name = value
end
end
name = "#{Rails.root}/export_multiple/#{@file_name}"
File.open(name, "w+") {|f| f.write(@data)}
`zip -r export_selected "export_multiple/#{@file_name}"`
send_file "#{Rails.root}/export_selected.zip", type: "application/zip", disposition: 'attachment'
end