Comunidad de diseño web y desarrollo en internet online

Duda al guardar imagen en el servidor

Citar            
MensajeEscrito el 30 Mar 2011 10:10 am
Hola, estoy desarrollando una aplicación en la que los usuarios puedan hacer un dibujo en flash y luego este dibujo se guarda en un servidor. Todo funciona bien, excepto que en el script para guardar la imagen al sevidor hay un navigateToURL que cuando guarda la imagen me abre una ventana con la url de la imagen y si comento esa linea no salta la ventana pero no guarda la imagen en servidor ¿Como podría evitar que saltase esa ventana, pero que la imagen se guarde en el servidor? este es el script que utilizo:

Código ActionScript :

private function saveHandler(e:MouseEvent):void
      {
         canvas.overlay = null;
         //creamos un Bitmap del lienzo
         var canvasBmp:BitmapData = new BitmapData(521,213);
         canvasBmp.draw(canvas);

         var myEncoder:JPGEncoder = new JPGEncoder(100);
         var byteArray:ByteArray = myEncoder.encode(canvasBmp);

         canvasBmp.dispose();

         _fileRef = new FileReference();
         _fileRef.save(byteArray, "dibujo.jpg");
         var header:URLRequestHeader = new URLRequestHeader("Content-type","application/octet-stream");
         var myDate:Date = new Date();
         var timeNow:Number = myDate.getTime();
         timeNow.toString();
         var saveJPG:URLRequest = new URLRequest("savejpg.php?nombre=images/dibujo_"+myDate+".jpg");
         saveJPG.requestHeaders.push(header);
         saveJPG.method = URLRequestMethod.POST;
         saveJPG.data = byteArray;
         //****************************************
         navigateToURL(saveJPG, "_blank");
         //****************************************
      }


y este es el php:

Código PHP :

<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
   // get bytearray
   $jpg = $GLOBALS["HTTP_RAW_POST_DATA"];

   // add headers for download dialog-box
   header('Content-Type: image/jpeg');
   $nombreArchivo = $_GET['nombre'];
   $manejadorArchivo = fopen($nombreArchivo, 'w') or die("No se pudo escribir archivo");
   fwrite($manejadorArchivo,$jpg);
   fclose($manejadorArchivo);
}
?>


gracias!!

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 30 Mar 2011 11:42 am
No uses navigateToURL, usa algo así:

Código ActionScript :

var saveJPG:URLRequest = new   URLRequest("savejpg.php?nombre=images/dibujo_"+myDate+".jpg"); 
         saveJPG.requestHeaders.push(header); 
         saveJPG.method = URLRequestMethod.POST
         saveJPG.data = data 
         var loader:URLLoader = new URLLoader()
         loader.dataFormat = URLLoaderDataFormat.BINARY                  loader.addEventListener(Event.COMPLETE, dataOnLoad)
                loader.load(saveJPG)


Lo hice medio de memoria, puede que de algún error, pero esa es la idea

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Mar 2011 01:43 pm
Gracias Jorge, he puesto el código que me has dicho y le he cambiado algunas cosas para que no me diese errores y a quedado así:

Código ActionScript :

var saveJPG:URLRequest = new URLRequest("savejpg.php?nombre=images/dibujo_" + myDate + ".jpg");
         saveJPG.requestHeaders.push(header);
         saveJPG.method = URLRequestMethod.POST;
         saveJPG.data = byteArray;

         var urlLoader:URLLoader = new URLLoader();
         urlLoader.addEventListener(Event.COMPLETE, sendComplete);
         urlLoader.load(saveJPG);


pero sigue sin subir la imagen al servidor :?

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 30 Mar 2011 03:19 pm
Quiza sendToURL te sirva. Supongo que el ejemplo te guiara un poco.

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 30 Mar 2011 03:48 pm
Tienes que quitar el header del PHP y asegurarte que PHP tiene derechos de escritura sobre la carpeta a la que quieras copiarlo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Mar 2011 04:21 pm
Eso ya lo había echo, pero aún así no sube la imagen.
:shock:

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 30 Mar 2011 04:31 pm
Pon la URL donde lo estás haciendo y le echo un ojo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Mar 2011 04:36 pm

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 31 Mar 2011 02:21 am
Sale un Security Sandbox Violation al abrirse la ventana de guardar ... ¿Estás usando algún elemento o script de otro dominio?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 31 Mar 2011 03:24 am
utilize las herramientas de dibujo ,lo guarde y lo acabo de abrir !! oo
muy buena aplicacion..eventualmente tendre q hacer algo asi ..descargar un documento al pc del servidor

=)

Por TeNm3

8 de clabLevel



 

chrome
Citar            
MensajeEscrito el 31 Mar 2011 08:40 am

solisarg escribió:

Sale un Security Sandbox Violation al abrirse la ventana de guardar ... ¿Estás usando algún elemento o script de otro dominio?



einnn? pues que yo sepa no, esta es una aplicación que se llama graffiti drawing app y la estoy modificando para que se suban los dibujos al servidor. Así que no se si hay algun script que provoque ese SSV. Que es lo que causa que aparezca ese SSV. Quiero decir, si antes guardaba las imágenes, porque ahora no las guarda si solo he añadido/cambiado un trozo de script?

Gracias.

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 May 2011 09:05 am
Al final lo he conseguido, usando sendToURL como dijo Acreonte, la imagen se guarda perfectamente sin abrir otra ventana. Pero con sendToURL no obtengo respuesta del servidor en caso de fallo o exito en la carga, así que he probado con URLRequest:

Código ActionScript :

private function anadirHandler(e:MouseEvent):void
      {
         var canvasBmp:BitmapData = new BitmapData(606,516);
         canvasBmp.draw(canvas);
         var myEncoder:JPGEncoder = new JPGEncoder(100);
         var byteArray:ByteArray = myEncoder.encode(canvasBmp);

         canvasBmp.dispose();
         var header:URLRequestHeader = new URLRequestHeader("Content-type","application/octet-stream");

         var myDate:Date = new Date  ;
         var timeNow:Number = myDate.getTime();
         timeNow.toString();
            /* esto funciona pero no obtengo respuesta de exito/fallo en la carga.
         var saveJPG:URLRequest = new URLRequest("savejpg.php?nombre=images/dibujo_" + myDate + ".jpg");
         saveJPG.requestHeaders.push(header);
         saveJPG.method = URLRequestMethod.POST;
         saveJPG.data = byteArray;
         sendToURL(saveJPG);
         */
            var request:URLRequest = new URLRequest("savejpg.php?nombre=images/dibujo_" + myDate + ".jpg");
         request.data = byteArray;
         request.method = URLRequestMethod.POST;
         var loader:URLLoader = new URLLoader();
         loader.dataFormat = URLLoaderDataFormat.VARIABLES;
         try
         {
            loader.load(request);
            trace("Su imagen ha sido guardada");
            showSaveMessage(msg);
         }
         catch (e:Error)
         {
             mensaje_mc.texto_txt.text = "Error al guardar su dibujo";
         }
      }


Pero utilizando URLRequest vuelve el fallo de antes:

escribió:

Error #2044: securityError no controlado: text=Error #2048: Violación de la seguridad Sandbox: http://www.../dibujo.swf no puede cargar datos desde savejpg.php?nombre=images/dibujo_Wed May 25 11:01:06 GMT+0200 2011.jpg.
at Main/anadirHandler()

:?

¿porque me sale el error con URLRequest si con sendToURL se guarda perfectamente?

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 May 2011 11:31 am
¿El swf y el PHP que guarda el dibujo están en el mismo dominio?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 May 2011 12:10 pm
Si, eso es lo extraño!!

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 May 2011 12:50 pm
El draw también tiene restricciones de dominio, si por ejemplo cargas una imagen de otro dominio y le quieres hacer un bitmap.draw te da error de seguridad ... ¿no hay ninguna imagen que quieras dibujar que esté en otro dominio?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 May 2011 01:04 pm
Pues tengo todos los archivos en la misma carpeta del sevidor, excepto en la que guardo los dibujos que esta en una carpeta dentro de esa misma carpeta. Me resulta extraño que sea por el draw, porque cuando lo hacia con sendToURL(); se guardaba y no daba ese error...

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 May 2011 02:04 pm
Alguien sabe por que pasa esto?

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 May 2011 08:41 am
Al final lo he conseguido.

Gracias a todos!

Por plug

78 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 May 2011 10:45 am
Y cual era el problema?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 31 May 2011 03:03 pm
Creo que era el script que estaba utilizando. Al final lo que utilicé fue URLRequest para enviar los datos y URLLoader para recibir la respuesta del servidor:

Código ActionScript :

//********************************
//guardar imagen en servidor
//************************************
//Url del archivo PHP que va a codificar la imagen
var url:String = "http://www.midominio.com/guardar.php"
var codificador:PNGEncoder;

guardar_btn.addEventListener(MouseEvent.CLICK,serverHandler);
function serverHandler(e:MouseEvent):void
{
        mensaje_mc.visible = true;
   mensaje_mc.texto_txt.text = "Codificando imagen para su envio...";
   //Creo los contenedores para enviar datos y recibir respuesta
   var enviar:URLRequest = new URLRequest(url);
   var recibir:URLLoader = new URLLoader();

   var bmd:BitmapData = new BitmapData(700,500);
    bmd.draw(canvas);
   //Creo la variable que va a ir dentro de enviar, con los campos que tiene que recibir el PHP.
   var variables:URLVariables = new URLVariables();
   //Creo el campo imgen, pasando primero el bitmap a un bytearray, y después codificandolo a Base64
   variables.imagen = Base64.encodeByteArray(PNGEncoder.encode(bmd));
   //Indico el método por el que se va a enviar la información.
   enviar.method = URLRequestMethod.POST;
   enviar.data = variables;

   //Añado listeners a recibir, para un posible error y una respuesta.
   recibir.addEventListener(Event.COMPLETE,Respuesta);
   recibir.addEventListener(IOErrorEvent.IO_ERROR,HayError);
   recibir.load(enviar);
   mensaje_mc.texto_txt.text = "Esperando conversión del archivo...";
   //al recibir una respuesta del PHP
   function Respuesta(event:Event){
         trace(event.target.data);
           mensaje_mc.texto_txt.text = ("Tu imagen se ha guardado");
   }
   //cuando no se puede cargar el PHP
   function HayError(event:IOErrorEvent):void {
          mensaje_mc.texto_txt.text = ("Error al cargar el dibujo");
   }
}


Y así funcionó.

Gracias por vuestra ayuda!! :wink:

Por plug

78 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.