Upload en ajax

Conoceis algún upload en ajax para rails?

Hola Miguel Angel,

Lo mejor que conozco es esta técnica:

In-place file upload with Ruby on Rails | Dmytro Shteflyuk's Home

que envía el archivo mediante un iframe oculto. Para simplificar las
cosas en el ejemplo que te indico utilizan este plugin:
http://agilewebdevelopment.com/plugins/responds_to_parent

No es ajax, pero te evita refrescar toda la página :wink:

Raul

Raul M.
escribió:

No es ajax, pero te evita refrescar toda la página :wink:


Gracias, googleando me he encontrado con éste también
http://sean.treadway.info/demo/upload/

Raul M.
escribió:

No es ajax, pero te evita refrescar toda la página :wink:

Raul

Cómo puedo usar ese plugin, visitando la web se pueden descargar todos
estos ficheros:

Revision 230: /plugins/responds_to_parent

* .. <http://sean.treadway.info/svn/plugins/>
* MIT-LICENSE
  <http://sean.treadway.info/svn/plugins/responds_to_parent/MIT-LICENSE>
* README
  <http://sean.treadway.info/svn/plugins/responds_to_parent/README>
* Rakefile
  <http://sean.treadway.info/svn/plugins/responds_to_parent/Rakefile>
* init.rb
  <http://sean.treadway.info/svn/plugins/responds_to_parent/init.rb>
* lib/ 

http://sean.treadway.info/svn/plugins/responds_to_parent/lib/
* test/
http://sean.treadway.info/svn/plugins/responds_to_parent/test/

Tengo que copiar el responde_to_parent.rb que viene en lib en
vendor/plugins e incluir el init.rb en mi controlador?

On Mar 16, 2007, at 2:09 PM, Miguel Angel Calleja Lázaro wrote:

http://agilewebdevelopment.com/plugins/responds_to_parent

No es ajax, pero te evita refrescar toda la página :wink:

Raul

Cómo puedo usar ese plugin, visitando la web se pueden descargar todos
estos ficheros:

script/plugin entiende URLs a repositorios Subversion, por eso los
plugins en general las publican:

script/plugin install http://sean.treadway.info/svn/plugins/
responds_to_parent/

Ademas de lo que haya online, algunos plugin tiene documentacion
generable, pero en cualquier caso suele venir informacion acerca del
uso en el README.

– fxn

Hola

Tengo un problemilla, mi vista es un formulario para crear un item con
su título, texto y video por ejemplo, el caso es que al tener un
formulario principal que me crea el item, si pongo tal como el ejemplo
que pone otro formulario para hacer el upload
no puedes anidar formularios… no está permitido en html. Tienes dos
opciones… o haces que una única acción trate todos los campos del
formulario, incluyendo el upload (que en un caso típico sería lo normal)
o si por cualquier motivo eso no te vale, tendrás que jugar con
javascript para cambiar el action y target de tu form antes de enviarlo.

No olvides además marcar que es multipart, porque si no no conseguirás
hacer el upload.

saludos,

j

Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!

no puedes anidar formularios… no está permitido en html. Tienes dos
opciones… o haces que una única acción trate todos los campos del
formulario, incluyendo el upload (que en un caso típico sería lo normal)
o si por cualquier motivo eso no te vale, tendrás que jugar con
javascript para cambiar el action y target de tu form antes de enviarlo.

y por supuesto la opción c) que consiste en no anidar los formularios
sino poner uno detrás de otro, claro


Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!

javier ramirez
escribió:

Voy a pensar a ver qué hago con los formularios, ya lo hice en PHP con
iframes también, pero bueno en rails a ver qué pienso.
A qué directorio sube los ficheros cuando hace el upload? he añadido el
multipart al form, no me da error ya, pero no se si ha hecho algo

Xavier N.
escribió:

script/plugin install http://sean.treadway.info/svn/plugins/
http://lists.simplelogica.net/mailman/listinfo/ror-es

Tengo un problemilla, mi vista es un formulario para crear un item con
su título, texto y video por ejemplo, el caso es que al tener un
formulario principal que me crea el item, si pongo tal como el ejemplo
que pone otro formulario para hacer el upload, al pulsar sobre el submit
de ese form, me lleva al action de mi form principal, el upload no me
hace nada. He probado a quitar mi form principal y poner sólo el form
del upload a ver qué es lo que hace, pero no me funciona tampoco.

Mi vista es ésta:

INICIO

<%= pintar_errores(@destacado) %> <%= start_form_tag :action => 'create'%>

Título <%=hidden_field "destacado","pagina_id","value"=>1%><%= text_field "destacado", "titulo","size"=>40 %>
Texto
<%= text_area "destacado","texto",:size => "25x10" %>
Video
  <iframe id='frame' name="frame" style="display:

none">

Es destacado? <%=check_box "destacado", "destacado"%>
<%= submit_tag "Grabar" %> <%= end_form_tag%>

Y mi controlador:
class Admin::InicioController < ApplicationController
def upload_action
# Do stuff with params[:uploaded_file]

responds_to_parent do
  render :update do |page|
    |page << "alert($('stuff').innerHTML)"|
  end
end

end
end

Tengo unas dudas:

  1. He instalado el plugin:

ruby script/plugin install
http://sean.treadway.info/svn/plugins/responds_to_parent/
Me lo crea en vendor/plugins

  1. Si pongo |page << “alert($(‘stuff’).innerHTML)”, me da un error:
    RJS error:
    ReferenceError: $ is not defined
  2. Si pongo |page.replace_html ‘upload_form’, :partial => ‘upload_form’,
    lógicamente me da error diciendome que no encuentra un rhtml o rjs para
    _upload_form, el caso es que no se qué tendría que contener este rjs,
    estoy copiando el ejemplo tal como viene
  3. En el ejemplo el controlador es de este tipo:

| class Test < ActionController::Base

mientras que mi controlador es así: |class Admin::InicioController <
ApplicationController

He creado bien mi método en mi controlador?

  1. En el caso de que me funcione, a qué directorio sube las cosas?

  2. Si tengo dos formularios en la plantilla, uno para el upload y otro
    para grabar todo el item, funciona?

Bueno, no doy más la brasa… , si alguno que lo haya hecho me puede
orientar con este upload que estoy perdidillo, muchas gracias

On 3/19/07, Miguel Angel Calleja Lázaro [email protected] wrote:

<%= start_form_tag( {:action => :update_form}, :multipart => true,

Cuando doy al submit, el formulario es submitado en el iframe oculto, se
pregunto si habría que hacer alguna funcionalidad para subirlo al
servidor, no? algo como leer el fichero que subo (File.open …) y
escribirlo en el servidor en la ruta correcta.

Esas son mis dudas, si alguien me puede ayudar se lo agredeceré
enormemente, estoy perdidillo, gracias

El params[:file_data] que obtienes es un objeto File de Ruby, por eso
cuando lo imprimes aparece eso.

Para comprobar si el usuario ha enviado un archivo debes comprobar si
tu params[:file_data].size > 0. Para obtener los datos del archivo
puedes hacer un params[:file_data].read, para obtener el tipo de
fichero params[:file_data].content_type y para obtener el nombre
original params[:file_data].original_filename.

Sigo intentando hacer el upload de ficheros, con el iframe oculto:

En mi plantilla:

|<%= render :partial => ‘upload_file’ %>|

Mi partial ‘upload_file’
<%= start_form_tag( {:action => :update_form}, :multipart => true,
:target=>‘upload-frame’) %>

<%= file_field_tag "file_data" %>

<%= submit_tag "Submit" %>

<%= end_form_tag %>

En mi controlador el método:
def update_form
responds_to_parent do
render :update do |page|
page.replace_html ‘upload_box’, :partial => ‘upload_file’,
:locals =>{:fichero=>:params[:file_data]}
end
end
end

Cuando doy al submit, el formulario es submitado en el iframe oculto, se
llama al método y el método me sustituye mi ‘upload_box’ por el partial,
tengo dos dudas:

  1. Si en el partial leo mi variable :fichero que contiene lo que le
    llega del params[:file_data], es algo como así #<File:/tmp/CGI13080.0>,
    es un nombre bastante feo, qué significa? porque no se si se ha subido
    al servidor en el directorio temporal y cómo puedo leer mi variable
    (file_data) con el nombre correcto?
  2. Como desconozco si se ha subido el fichero al servidor, rails hace
    cosas maravillosas pero como soy novato y sigo perdido bastante, me
    pregunto si habría que hacer alguna funcionalidad para subirlo al
    servidor, no? algo como leer el fichero que subo (File.open …) y
    escribirlo en el servidor en la ruta correcta.

Esas son mis dudas, si alguien me puede ayudar se lo agredeceré
enormemente, estoy perdidillo, gracias

El params[:file_data] que obtienes es un objeto File de Ruby, por eso
cuando lo imprimes aparece eso.
un detalle… si el fichero es de tamaño normal, rails lo mapea
efectivamente en un Tempfile. Pero, si el fichero es muy pequeño (1k,
por ejemplo), lo mete en un StringIO. Los dos tienen los métodos a los
que estamos acostumbrados para los objetos IO, pero ya he visto en más
de un sitio una comprobación por un is_a? Tempfile que falla
miserablemente por ese motivo.

uno de los principios de ruby es el de la mínima sorpresa, pero… qué
sería de la vida sin sorpresitas como esta de vez en cuando? :wink:

saludos,

javier ramírez


Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!