Estoy tratando de cargar archivos con Sinatra. Tengo el código here, pero aparece el error "el método file_hash no existe" (ver /lib/mvc/helpers/helpers.rb).Carga de archivos con Sinatra
¿Qué está pasando aquí? ¿Hay alguna dependencia que me falta?
Estoy tratando de cargar archivos con Sinatra. Tengo el código here, pero aparece el error "el método file_hash no existe" (ver /lib/mvc/helpers/helpers.rb).Carga de archivos con Sinatra
¿Qué está pasando aquí? ¿Hay alguna dependencia que me falta?
He tenido buena suerte con el código de ejemplo que se encuentra en this thread.
Incluyendo aquí en caso de que el enlace nunca desaparece:
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
Luego, su vista se vería así. Esto utiliza HAML, pero lo importante es no olvidar para establecer el enctype en su elemento de formulario, de lo contrario se acaba de obtener el nombre del archivo en lugar de un objeto:
%form{:action=>"/upload",:method=>"post" ,:enctype=>"multipart/form-data"}
%input{:type=>"file",:name=>"file"}
%input{:type=>"submit",:value=>"Upload"}
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>
encontré, ligeramente cambiado y usados esto:
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
El original está en https://github.com/tbuehlmann/sinatra-fileupload pero tienen algunos problemas de configuración en mi entorno. No olvides usar enctype="multipart/form-data"
y method='POST'
en el formulario de carga.
En mi situación, creo que la primera clave hash es una cadena, no un símbolo, por ejemplo. 'params ['file']' –
Supongo que está tratando de usar un clip con esto. ¿Podrías volver a pegar tu código (el enlace conduce a una página muerta)? De lo contrario, ¿cuál fue tu solución? – slant