En este ejemplo, he creado un archivo Flash con un botón en el escenario. Cuando hace clic en ese botón, Flash envía la imagen del botón a un archivo ASPX que lo guarda como JPEG. Como verá, esto se hace dibujando el DisplayObject
en un objeto BitmapData
y, como tal, puede reemplazar fácilmente la referencia al botón con cualquier cosa que herede del DisplayObject
(incluido un clip de película que contiene el lienzo para una aplicación de pintura, etc.) .
Te guiaré por el elemento Flash primero y luego por el .NET back-end.
flash
Para enviar una imagen generada como esta de Flash para ASP.NET (o cualquier otro backend) que vas a necesitar un par de bibliotecas 3 ª parte. Necesitaremos un Encoder JPEG (que Flash no tiene, pero las versiones recientes de Flex lo hacen) que podemos obtener del AS3 Core Lib http://code.google.com/p/as3corelib/. También necesitaremos un codificador base64 para enviar los datos a través del cable. Usaré el de Dynamic Flash, disponible en http://dynamicflash.com/goodies/base64/.
Descárguelos y extráigalos en algún lugar sensato de su disco duro (como una carpeta C: \ lib).
Creé un nuevo archivo AS3 Flash y lo guardé como uploader.fla. Agregué un componente de botón al escenario y lo llamé btnUpload. A continuación, edité la configuración de ActionScript y agregué mi carpeta c: \ lib al classpath. Luego di al documento un nombre de clase de Uploader y guardé el archivo.
A continuación, crea un archivo de ActionScript y ha añadido el siguiente código al mismo:
package
{
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.utils.ByteArray;
import fl.controls.Button;
import com.adobe.images.JPGEncoder;
import com.dynamicflash.util.Base64;
public class Uploader extends MovieClip
{
// Reference to the button on the stage
public var btnUpload:Button;
// Encoder quality
private var _jpegQuality:int = 100;
// Path to the upload script
private var _uploadPath:String = "/upload.aspx";
public function Uploader()
{
btnUpload.addEventListener(MouseEvent.CLICK, buttonClick);
}
private function buttonClick(e:MouseEvent):void
{
// Create a new BitmapData object the size of the upload button.
// We're going to send the image of the button to the server.
var image:BitmapData = new BitmapData(btnUpload.width, btnUpload.height);
// Draw the button into the BitmapData
image.draw(btnUpload);
// Encode the BitmapData into a ByteArray
var enc:JPGEncoder = new JPGEncoder(_jpegQuality);
var bytes:ByteArray = enc.encode(image);
// and convert the ByteArray to a Base64 encoded string
var base64Bytes:String = Base64.encodeByteArray(bytes);
// Add the string to a URLVariables object
var vars:URLVariables = new URLVariables();
vars.imageData = base64Bytes;
// and send it over the wire via HTTP POST
var url:URLRequest = new URLRequest(_uploadPath);
url.data = vars;
url.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
loader.load(url);
}
}
}
I guardado este archivo al lado de la FLA con el nombre Uploader.as.
Publiqué el archivo SWF en la raíz de mi sitio web Asp.NET. Este código asume que desea cargar el archivo jpeg con una calidad del 100% y que el script que recibirá los datos se llama upload.aspx y se encuentra en la raíz del sitio.
ASP.NET
En la raíz de mi sitio web que creó un formulario Web llamado upload.aspx. En el archivo .aspx, eliminé todo el contenido, aparte de la directiva de la página. Es ver el contenido de esta manera:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %>
Luego, en el CodeBehind, que añade el texto siguiente:
using System;
using System.IO;
public partial class upload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Get the data from the POST array
string data = Request.Form["imageData"];
// Decode the bytes from the Base64 string
byte[] bytes = Convert.FromBase64String(data);
// Write the jpeg to disk
string path = Server.MapPath("~/save.jpg");
File.WriteAllBytes(path, bytes);
// Clear the response and send a Flash variable back to the URL Loader
Response.Clear();
Response.ContentType = "text/plain";
Response.Write("ok=ok");
}
}
es evidente que hay valores no modificables, como la ruta para guardar pero a partir de esto, usted debe ser capaz de crea el sistema que necesites
¿Esto es AS2 o AS3? –
Esto sería AS3. – EfficionDave