Как я могу получить полный путь к выбранному файлу в Ruby on Rails? - PullRequest
2 голосов
/ 14 июля 2011

Я поставил file_field на мой взгляд:

<% form_for(:uploaded_file, @feed, :url => {:action=>'copy'}, :html=> {:multipart=>true}) do |f| %>
<%= f.file_field :uploaded_file %> <br>
<%= f.submit "Submit" %>
<% end %>

И у меня в контроллере есть метод, который читает файл Excel:

def copy
    file = ""
    book = Spreadsheet.open 'excel_file'
    table = book.worksheet 'excel_sheet'
    table.each do |row|
      file << row
    end
end

Журнал с запросом

"authenticity_token"=>"BbQRomTLhiF2O54/G6eHwnnaWbLttUSvo31FO3ZtKoA=", 
"uploaded_file"=>{"uploaded_file"=>#<ActionDispatch::Http::UploadedFile:
 0x27b7ab‌​0 @original_filename="test.xlsx",@content_type="application
 /vnd.openxmlformats-officedocument.spreadsheetml.sheet", @headers=
 "Content-Disposition: form-data; name=\"uploaded_file[uploaded_file]\";
 filename=\"volumetrie.xlsx\"\r\nContent-Type: application/vnd.openxmlformats
 officedocument.spreadsheetml.sheet\r\n", @tempfile=#<File:C:/DOCUME~1/me/
 LOCALS~1/Temp/RackMultipart20110714-524-fy6vu>>}, "commit"=>"Submit"} 

Я просто пытаюсь получить путь к выбранному файлу, чтобы вставить его в метод Spreadsheet.open. Сообщение об ошибке: Нет такого файла или каталога.

Вместо 'excel_file', который является путем к моему файлу Excel, я хотел бы использовать путь к файлу, который я выбрал в file_field в моем представлении. Как я могу использовать этот параметр?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

File.absolute_path (файл)

Ruby Doc

1 голос
/ 14 июля 2011

Вы не можете получить путь к файлу из формы в современных браузерах. Вы можете работать только с временным файлом. Должно быть доступно как params[ :uploaded_file ][ :tempfile ]

Редактировать Попробуйте

file = Spreadshet::Excel.new('params[ :uploaded_file ][ :filename ]', 'w+')
file.write( params[ :uploaded_file ][ :tempfile ].read )
...