2011-04-25 14 views
21

Estoy buscando una forma simple de cargar un archivo (un archivo xml) al directorio público de Rails 3. Una vez que esté allí, quiero abrirlo, analizar el contenido y eliminar el archivo después de eso.Rails 3 - subir archivos al directorio público

Cuando busqué archivos cargados, me encontré con Paperclip. Pero no quiero asociar el archivo con un objeto. Solo quiero subirlo. ¿Cuál es la forma más fácil de hacer esto?

Respuesta

43

a. Formulario

<%= form_for :file_upload, :html => {:multipart => true} do |f| %> 
    <%= f.file_field :my_file %> 
    <%= f.submit "Upload" %> 
<% end %> 

b. controlador

def file_upload 
    require 'fileutils' 
    tmp = params[:file_upload][:my_file].tempfile 
    file = File.join("public", params[:file_upload][:my_file].original_filename) 
    FileUtils.cp tmp.path, file 
    ... # YOUR PARSING JOB 
    FileUtils.rm file 
end 

Pero se puede analizar solo archivo temporal, por lo que no es necesario para copiarlo en dir pública y será borrada automáticamente

+0

muchas gracias. De hecho, ya tuve eso. Simplemente no sabía que un archivo temporal ya estaba en mi params hash. – smark

3

he recibido un error que indica "método no definido` cp' para el archivo: Clase". Se dio cuenta de que esta realidad debe actualizarse de la siguiente manera:

código correcto para el método file_uplad:

def file_upload 
    tmp = params[:file_upload][:my_file].tempfile 
    require 'ftools' 
    file = File.join("public", params[:file_upload][:my_file].original_filename) 
    FileUtils.cp tmp.path, file 
end 
+3

ugh. No ejecutar requiere cada vez que llame al método - hágalo una vez en el encabezado del archivo (ya que es parte de stdlib. Si fuera una gema, debe ponerlo en su archivo gem) – yxhuvud

-1
img = params[:user][:photo] 
File.open(Rails.root.join('public','uploads',img.original_filename),'wb') do |file| file.write(img.read) 
Cuestiones relacionadas