bob*_*low 8 ruby api ruby-on-rails actioncontroller grape-api
我想允许使用ruby的Grape API下载二进制文件(.p12文件).这就是我想要的.
get '/download_file' do
pkcs12 = generate_pkcsfile
content_type('application/octet-stream')
body(pkcs12.der)
end
Run Code Online (Sandbox Code Playgroud)
使用ActionController的等效代码是
begin
pkcs12 = generate_pkcsfile
send_data(pkcs12.der,
:filename => 'filename.p12')
end
Run Code Online (Sandbox Code Playgroud)
问题是使用API下载的文件似乎是一个文本文件,每个字符都嵌入了'\ ufffd'前缀,而使用浏览器下载的文件似乎是二进制文件.如何使用GRAPE API框架允许下载通过ActionController的send_data下载的同一文件
小智 15
有问题#412和#418已报告到葡萄github页面.哪些与返回二进制文件和覆盖内容类型有关.
要像这样返回二进制格式:
get '/download_file' do
content_type "application/octet-stream"
header['Content-Disposition'] = "attachment; filename=yourfilename"
env['api.format'] = :binary
File.open(your_file_path).read
end
Run Code Online (Sandbox Code Playgroud)
我认为你的 Grape 代码没问题,我已经使用浏览器和用于测试 API 的 Mac HTTP 工具(称为 GraphicalHTTPClient)测试了它的变体。'application/octet-stream'我成功地从磁盘加载了一个二进制文件,并使用与您几乎相同的代码以 MIME 类型传输它:
get :download do
data = File.open('binary_data').read
content_type 'application/octet-stream'
body data
end
Run Code Online (Sandbox Code Playgroud)
我建议您的问题在于 API 客户端和/或字符编码(如 Stuart M 所建议)。尽管到目前为止我们的讨论中我想到的另一种可能性是某些 Rack 中间件被错误触发,并修改了 Grape 的输出。
| 归档时间: |
|
| 查看次数: |
5852 次 |
| 最近记录: |