2012-08-10 34 views
12

Rails 3, JRuby 1.6.7.2tập tin tải lên trong Rails cho chuỗi tên tập tin thay vì Tệp or đối tượng StringIO

Tôi đã cố gắng một cái gì đó "tiểu học", chỉ cần tải lên một tệp văn bản thông qua một hình thức để chế biến trong tôi ứng dụng. Vấn đề tôi thấy là thay vì một StringIO hoặc File, tôi chỉ nhận được một chuỗi tên tập tin.

Dưới đây là phần mã cho form

= form_tag(:controller => "api/#{CURRENT_API_VERSION}/api", :action => 'file', :method=> :post, :multipart => true) do 
    = label_tag "file" 
    = file_field_tag "upload[file]" 
    = submit_tag 'Analyze!' 

Và mã điều khiển mà chỉ là đem lại cho tôi @upload như là một chuỗi chứa tên tập tin.

def file 
     @upload = params[:upload][:file] 
     render :template => 'api/file.html.haml' 
     end 

Chạy trình gỡ lỗi trong bộ điều khiển cho tôi @ upload.class = Chuỗi và không trả lời bất kỳ tệp hoặc phương pháp StringIO nào, chẳng hạn như đã đọc.

Trả lời

21

Tìm thấy câu trả lời ở đây. Nó chỉ ra tôi đã chỉ vặn lên các cuộc gọi phương thức form_tag. Bạn cần tách các tùy chọn dành cho "url_for" và các tùy chọn khác, cụ thể là tùy chọn nhiều phần.

Vì vậy, đúng mã cho các hình thức là:

= form_tag({:controller => "api/#{CURRENT_API_VERSION}/api", :action => 'file', :method=> :post}, {:multipart => true}) do 
    = label_tag "file" 
    = file_field_tag "upload[file]" 
    = submit_tag 'Analyze!' 

Nhờ Rob Biedenharn cho trả lời này cách đây năm năm về ruby-diễn đàn! http://www.ruby-forum.com/topic/125637

+0

Tương tự như 'form_tag ({: controller =>" api/# {CURRENT_API_VERSION}/api ",: action => 'file',: method =>: post},: multipart => true)' – fangxing

Các vấn đề liên quan