2016-02-26 6 views
0

Я пытаюсь загрузить файл в grape0.7.0. Я использую FormData и javascriptfetch на передней панели.Загрузка файла с ruby ​​grape

Мои заголовки запроса выглядит

accept:*/* 
accept-version:v3 
authorization:omitted 
content-type:multipart/form-data 
Origin:http://dev:3000 
Referer:http://dev:3000/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36 

Мой запрос полезной нагрузки выглядит

------WebKitFormBoundaryqiglzdBECLEG1gI3 
Content-Disposition: form-data; name="csv"; filename="invitations.csv" 
Content-Type: text/csv 


------WebKitFormBoundaryqiglzdBECLEG1gI3-- 

Когда я просматриваю grape Params в конечной точке я получаю

{"------WebKitFormBoundaryxxY3USBOh0XBBUbk\r\nContent-Disposition: form-data"=>nil, 
"name"=>"\"csv\"", 
"filename"=> 
    "\"invitations.csv\"\r\nContent-Type: text/csv\r\n\r\nFirst Last, [email protected]\r\n------WebKitFormBoundaryxxY3USBOh0XBBUbk--\r\n", 
"route_info"=> 
    #<Grape::Route:0x0000000a25ce70 
    @options= 
    {:description=>"Invite via CSV", 
    :params=> 
     {"csv"=> 
     {:required=>false, :type=>"Rack::Multipart::UploadedFile", :desc=>"csv containing users to be invited"}}, 
    :prefix=>nil, 
    :version=>"v3", 
    :namespace=>"/invitations", 
    :method=>"POST", 
    :path=>"/invitations/csv(.:format)", 
    :compiled=>/\A\/invitations\/csv(?:\.(?<format>[^\/.?]+))?\Z/}>} 

Я хочу file для отображения на params[:csv]. Почему grape интерпретирует параметры таким образом? Что я делаю не так?

Endpoint Декларация:

desc "Invite via CSV" 
params do 
    optional :csv, type: Rack::Multipart::UploadedFile, desc: 'csv containing users to be invited' 
end 
post '/csv' do 
    binding.pry # here is where I got the above grape params 
    # ... 
end 
+0

Как заявляют ваши виноградные ресурсы? пожалуйста, предоставьте больше информации о своем приложении, чтобы мы могли вам помочь. –

+0

@FabianoArruda добавил объявление конечной точки – Derek

ответ

0

Я думаю, вам нужно установить CONTENT_TYPE для CSV.

class My::API < Grape::API 
    content_type :csv, 'text/csv' 
end 

Использование type: File который просто псевдоним для Rack::Multipart::UploadedFile.

desc "Invite via CSV" 
params do 
    optional :csv, type: File, desc: 'csv containing users to be invited' 
end 
post '/csv' do 
    params.csv.filename # => 'invitations.csv' 
    params.csv.type  # => 'text/csv' 
    params.csv.tempfile # => #<File> 
end 
+0

Пробовал тип контента, все еще получая те же ошибки. – Derek

Смежные вопросы