2010-04-21 14 views
16

के साथ फ़ाइल अपलोड करें मैं सिनात्रा के साथ फाइल अपलोड करने में सक्षम होने की कोशिश कर रहा हूं। मेरे पास कोड here है, लेकिन मुझे त्रुटि मिल रही है "विधि file_hash मौजूद नहीं है" (देखें/lib/mvc/helpers/helpers.rb)।सिनात्रा

यहां क्या हो रहा है? क्या कुछ निर्भरता है जो मुझे याद आ रही है।

+0

मुझे लगता है कि आप इसके साथ पेपरक्लिप का उपयोग करने की कोशिश कर रहे हैं। क्या आप अपना कोड दोबारा पेस्ट कर सकते हैं (लिंक एक मृत पृष्ठ की ओर जाता है)? अन्यथा, आपका समाधान क्या था? – slant

उत्तर

27

मुझे this thread पर मिले उदाहरण कोड के साथ शुभकामनाएं मिली हैं।

इसे यहाँ सहित मामले में कड़ी कभी गायब हो जाता है:

post '/upload' do 
    unless params[:file] && 
     (tmpfile = params[:file][:tempfile]) && 
     (name = params[:file][:filename]) 
    @error = "No file selected" 
    return haml(:upload) 
    end 
    STDERR.puts "Uploading file, original name #{name.inspect}" 
    while blk = tmpfile.read(65536) 
    # here you would write it to its final location 
    STDERR.puts blk.inspect 
    end 
    "Upload complete" 
end 

तो आपके विचार इस प्रकार दिखाई देगा। यह Haml का उपयोग करता है, लेकिन महत्वपूर्ण हिस्सा अपने प्रपत्र तत्व में enctype स्थापित करने के लिए भूल जाते हैं नहीं है, अन्यथा आप सिर्फ एक वस्तु के बजाय फ़ाइल नाम मिल जाएगा:

%form{:action=>"/upload",:method=>"post" ,:enctype=>"multipart/form-data"} 
    %input{:type=>"file",:name=>"file"} 
    %input{:type=>"submit",:value=>"Upload"} 
20
include FileUtils::Verbose 

get '/upload' do 
    erb :upload 
end 

post '/upload' do 
    tempfile = params[:file][:tempfile] 
    filename = params[:file][:filename] 
    cp(tempfile.path, "public/uploads/#{filename}") 
    'Yeaaup' 
end 

__END__ 

@@upload 
<form action='/upload' enctype="multipart/form-data" method='POST'> 
    <input name="file" type="file" /> 
    <input type="submit" value="Upload" /> 
</form> 
4

मैंने पाया, थोड़ा बदल गया है और इस्तेमाल किया यह:

if params[:file] 
    filename = params[:file][:filename] 
    tempfile = params[:file][:tempfile] 
    target = "public/files/#{filename) 

    File.open(target, 'wb') {|f| f.write tempfile.read } 
end 

मूल https://github.com/tbuehlmann/sinatra-fileupload पर है लेकिन मेरे पर्यावरण पर कुछ कॉन्फ़िगरेशन समस्याएं हैं। अपलोड फॉर्म पर enctype="multipart/form-data" और method='POST' का उपयोग करना न भूलें।

+0

मेरी स्थिति में, मुझे लगता है कि पहली हैश कुंजी एक स्ट्रिंग है - प्रतीक नहीं - उदाहरण के लिए। 'पैरामीटर [ 'फ़ाइल']' –