How to allow Binary File download using GRAPE API

后端 未结 2 834
抹茶落季
抹茶落季 2021-02-04 15:21

I want to allow downloading a binary file (.p12 file) using ruby\'s Grape API. This is what I am trying.

get \'/download_file\' do
  pkcs12 = generate_pkcsfile 
         


        
相关标签:
2条回答
  • 2021-02-04 15:33

    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
    
    0 讨论(0)
  • 2021-02-04 15:59

    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.

    0 讨论(0)
提交回复
热议问题