Если добавить в nignx к location "proxysetheader Content-Type "multipart/form-data";"
А в rails controller "protectfromforgery except: :uploadfile"
То схема заработает. Правда я не знаю, правильно ли и безопасно ли это делать.
Здравствуйте, Анатолий!
Спасибо вам за данную заметку.
Я к сожалению столкнулся с рядом трудностей и отчаявшись, прошу Вас помочь разобраться мне, я обратил внимаение что в профиле вы указали rails, а я как раз его использую. rails 4.2, rack 1.6.0, nginx 1.6.2.
Если использовать данную конфигурации Webrick отдает 500 ошибку bad content body
Если убрать опцию proxysetbody off; то все отлично, НО запрос доходит до rails app и она его пишет в ОЗУ а этого делать не надо.
Если добавить proxysetbody off; и proxysetheader Content-Type "multipart/form-data"; то webrick возвращает ActionController::InvalidAuthenticityToken.
Я уже 3 день ковыряюсь с настройками и опциями, и все никак не могу заставаить это все работать. Мне то и нужено, что бы nginx сохранял файл, сообщал его путь в rails и что бы rails не писал тело файла в ОЗУ после nginx.
View Haml
= form_for :file, url: '/uploadfile', html: { multipart: true } do |f|
= file_field_tag 'uploaded_files[]', required: true
= f.submit 'Save'
end
Class
def uploadfile
# render :text => request.headers['X-File']
render :text => env.inspect
end
end
Route
Rails.application.routes.draw do
resources :files
root 'files#index'
match '/uploadfile' => 'files#uploadfile', via: [:get, :post]
end
Или вот на pastebin
nginx.conf - http://pastebin.com/YuKjNkee
rails app - http://pastebin.com/G3Bwzggu
Я только сейчас обратил внимание, что все вырезанные параметры и токены и все остальное было записано вместе с файлом, таким образом на . location /upload нужно отправлять только файл, без какой либо лишней информации.