How to allow Binary File download using GRAPE API

∥☆過路亽.° 提交于 2019-12-03 00:14:16

There are issues #412 and #418 have been reported to grape github page. Which are related to return a binary file and override content type.

To return binary format like so:

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

I think your Grape code is OK, I have tested a variant of it using a browser and a Mac HTTP tool (called GraphicalHTTPClient) that I use to test APIs. I successfully loaded a binary file from disk and transferred it with MIME type 'application/octet-stream' using almost identical code to yours:

  get :download do
    data = File.open('binary_data').read
    content_type 'application/octet-stream'
    body data
  end

I suggest your problem is with the API client and/or the character encoding (as suggested by Stuart M). Although another possibility that occurs to me form our discussion so far, is that some Rack middleware is being triggered incorrectly, and modifying the output from Grape.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!