我想允許使用ruby的Grape API下載二進制文件(.p12文件)。這是我正在嘗試的。如何允許使用GRAPE API下載二進制文件
get '/download_file' do
pkcs12 = generate_pkcsfile
content_type('application/octet-stream')
body(pkcs12.der)
end
使用ActionController的等效代碼是
begin
pkcs12 = generate_pkcsfile
send_data(pkcs12.der,
:filename => 'filename.p12')
end
的問題是文件中使用API似乎與嵌入每一個字符「\ ufffd」字頭的文本文件,而該文件下載使用瀏覽器下載似乎是二進制文件。我如何使用GRAPE API框架允許下載通過ActionController的send_data下載的相同文件
相較於輸出使用ActionController的請求,你看到的'內容Type' HTTP標頭中的差異返回?他們有不同的字符集? –
當你比較問題中的API和瀏覽器時,實際上是「API客戶端加API路由」還是「瀏覽器加上ActionController路由」?你有四種可能的組合,並且不清楚你有什麼問題 - 從你的描述中可以看出,問題實際上是在你的測試API客戶端中嗎? –
沒錯。爲了澄清,爲了測試葡萄API,我使用curl/wget作爲客戶端和/ download_file作爲端點。爲了測試ActionController,我使用了firefox瀏覽器和/ keys作爲端點。換句話說,端點是不同的,但我想要在兩個端點上獲得相同的行爲。我檢查了兩個標題。瀏覽器/鍵響應標題有'text/html; charset = utf-8'作爲內容類型,而葡萄響應頭具有'application/octet-stream'作爲內容類型。但是切換葡萄碼返回'text/html; charset = utf-8'沒有改變響應主體。 – boboverflow