2012-08-10 20 views
12

रेल 3 के बजाय स्ट्रिंग फ़ाइल नाम देता है JRuby 1.6.7.2फ़ाइल अपलोड करना, फ़ाइल या StringIO वस्तु

मैं "प्राथमिक", बस एक ही पाठ फ़ाइल एक रूप के माध्यम से प्रसंस्करण के लिए में अपलोड करने के कुछ कोशिश कर रहा है मेरी एप्लिकेशन। जिस समस्या को मैं देख रहा हूं वह यह है कि स्ट्रिंगियो या फ़ाइल के बजाय, मुझे फ़ाइल नाम की एक स्ट्रिंग मिल रही है।

यहाँ प्रपत्र कोड

= 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!' 

और नियंत्रक कोड है कि है बस मुझे एक स्ट्रिंग फ़ाइल नाम युक्त के रूप में @upload दिया जा रहा है। नियंत्रक में

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

रनिंग डिबगर मुझे देता @ upload.class = स्ट्रिंग, और के रूप में पढ़ा यह किसी भी फाइल या StringIO तरीकों, इस तरह का जवाब नहीं है।

उत्तर

21

यहां जवाब मिला। यह पता चला कि मैं सिर्फ form_tag विधि कॉल को खराब कर रहा था। आपको "url_for" और अन्य विकल्पों, विशेष रूप से बहु-भाग विकल्प के लिए उपयोग किए गए विकल्पों को अलग करने की आवश्यकता है।

तो प्रपत्र के लिए सही कोड है: माणिक मंच पर पांच साल पहले इस जवाब देने के लिए रोब Biedenharn को

= 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!' 

धन्यवाद! http://www.ruby-forum.com/topic/125637

+0

'form_tag ({: नियंत्रक =>" एपीआई/# {CURRENT_API_VERSION}/api ",: action => 'file',: method =>: post},: multipart => true) के समान '' – fangxing

संबंधित मुद्दे