2010-04-21 35 views
16

Sinatra ile dosya yükleyebilmek için çalışıyorum. here koduna sahibim, ancak "method file_hash yok" hatasını alıyorum (bkz. /lib/mvc/helpers/helpers.rb).Sinatra ile dosya yükleme

Burada neler oluyor? Kaybolduğum bir bağımlılık var mı?

+0

Bu konuda ataç kullanmayı denediğiniz var. Kodunuzu tekrar yapıştırabilir misiniz (link, ölü bir sayfaya yönlendirir)? Aksi halde, çözümün neydi? – slant

cevap

27

this thread adresinde bulunan örnek kodla iyi şanslar yaşadım.

durumda bağlantı hiç kaybolur buradan dahildir:

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 

Sonra görünümü şu şekilde görünecektir.

%form{:action=>"/upload",:method=>"post" ,:enctype=>"multipart/form-data"} 
    %input{:type=>"file",:name=>"file"} 
    %input{:type=>"submit",:value=>"Upload"} 
buldum
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

, biraz değişmiş ve kullanılmış: aksi takdirde sadece yerine bir nesnenin ismini alacak, bu HAML kullanır, ancak önemli bir kısmı da form elemanının enctype ayarlamak için unutmak değil Bu:

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 

orijinal https://github.com/tbuehlmann/sinatra-fileupload olan ama benim ortamında bazı yapılandırma sorunları var. Yükleme formunda enctype="multipart/form-data" ve method='POST' kullanmayı unutmayın.

+0

Durumumda, ilk hash anahtarının bir dize olduğunu - bir sembol değil - buluyorum. 'Parametreler [ 'Dosya'] ' –