2013-10-10 2 views
0

Я пробовал Typhoeus в первый раз, чтобы загрузить файл в Rails-приложение, но я не знаю, как превратить этот файл в то, что я могу использовать ,Как извлечь загруженный файл из тела, которое является StringIO

Выгрузка осуществляется как пример Typheous':

Typhoeus.put(
    url, 
    body: { 
    title: "This should be the title", 
    file: File.open(file_path, "r") 
    } 
) 

В контроллере request.body.string это:

"title=This%20should%20be%20the%20title&file=%5B%221-1381398552.zip%22%2C%20%22application%2Fzip%22%2C%20%22%2Fvagrant%2Fppc_reports%2Fspec%2Fdummy%2Ftmp%2F1381398547_qyforj%2F1-1381398552.zip%22%5D" 

Как я могу получить файл из тела и сохранить его в виде файла или Tempfile для работы?

ответ

0

Вы пробовали это? Я думаю, что StringIO должен вести себя как файл.

contents = params[:file].read 

После этого вы просто сохраните его в другом файле.

File.open('/path/to/file', 'rw') do |f| 
    f.write contents 
end 
+0

К сожалению, 'params' не включает в себя': File'. –

+0

Я предполагаю, что объект request.body тоже не является? Что это значит, когда вы запускаете это: 'Rails.logger.info request.body.inspect' ' Rails.logger.info params.inspect' – jeanaux

0

PUT не по умолчанию application/x-www-form-urlencoded (в отличие от POST), вы должны установить его:

Typhoeus.put(
    url, 
    body: { 
    title: "This should be the title", 
    file: File.open(file_path, "r") 
    }, 
    headers: { "Content-Type" => "application/x-www-form-urlencoded" } 
)