如何在 rails 控制器本身中返回压缩的 json 数据?



我有一个返回大量数据的 api,所以我想压缩这些数据并返回给客户端。 我知道在NginxRack::deflater in application.rb中有一些方法。但是我只想为此特定的 api 响应压缩此数据。(不想在NGNIX中这样做(

我尝试了这个答案中提到的:https://stackoverflow.com/a/35758106/5925134。 我能够压缩,但无法使用压缩数据响应客户端。我试过这个,想以某种方式respond_to gz作为响应类型。

Zlib::GzipWriter.open('public/huge_data.gz') { |gz| gz.write data.to_json }
respond_to do |format|
format.gz { render gz: {File.read('public/huge_data.gz') } }
end

有没有办法将此压缩数据传递给客户端或任何其他方法?提前致谢

我不建议这样做,但如果您真的想手动压缩 JSON 响应,这就是您的操作方式:

class CompressedController < ApplicationController
def test
respond_to do |f|
f.json do
file = Tempfile.new
json = JSON.generate(hello: 'World')
Zlib::GzipWriter.open(file.path) { |gz| gz.write json }
response.set_header('Content-Encoding', 'gzip')
send_data file.read, type: :json, disposition: 'inline'
end
end
end
end

这只是一个自包含的最小示例。将其调整为您的实际用例。

如果您真的想以理智的方式解决性能问题,请在 Web 服务器层上使用压缩和缓存。

相关内容

  • 没有找到相关文章

最新更新