Dans cet exemple, j'ai créé un fichier Flash avec un bouton sur la scène. Lorsque vous cliquez sur ce bouton, le Flash envoie l'image du bouton à un fichier ASPX qui l'enregistre au format JPEG. Comme vous le verrez, cela se fait en dessinant le DisplayObject
dans un objet BitmapData
et en tant que tel, vous pouvez facilement remplacer la référence au bouton par tout ce qui hérite de DisplayObject
(y compris un clip qui contient le canevas pour une application de peinture, etc.) . Je vais d'abord vous guider à travers l'élément Flash, puis le backend .NET.
flash
Pour envoyer une image générée comme celui-ci à partir de Flash à ASP.NET (ou tout autre système de traitement), vous allez avoir besoin de deux bibliothèques 3ème partie. Nous aurons besoin d'un encodeur JPEG (que Flash n'a pas, mais les versions récentes de Flex font) que nous pouvons obtenir de l'AS3 Core Lib http://code.google.com/p/as3corelib/. Nous aurons également besoin d'un encodeur base64 pour envoyer les données sur le réseau. Je vais utiliser celui de Dynamic Flash, disponible au http://dynamicflash.com/goodies/base64/.
Téléchargez-les et extrayez-les quelque part sensible sur votre disque dur (comme un dossier C: \ lib).
J'ai créé un nouveau fichier Flash AS3 et l'ai enregistré en tant que uploader.fla. J'ai ajouté un composant de bouton à la scène et l'ai nommé btnUpload. Ensuite, j'ai modifié les paramètres ActionScript et ajouté mon dossier c: \ lib au classpath. Ensuite, j'ai donné au document un nom de classe de Uploader et enregistré le fichier.
Ensuite, je crée un fichier ActionScript et a ajouté le code suivant à ce:
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);
}
}
}
J'enregistré ce fichier à côté de la FLA avec le nom Uploader.as. J'ai publié le fichier SWF à la racine de mon site Web Asp.NET. Ce code suppose que vous voulez télécharger le fichier jpeg avec une qualité de 100% et que le script qui recevra les données est appelé upload.aspx et se trouve à la racine du site.
ASP.NET
Dans la racine de mon site, je créé un formulaire Web nommé Upload.aspx. Dans le fichier .aspx, j'ai supprimé tout le contenu en dehors de la directive page. Il est regarder le contenu comme ceci:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %>
Ensuite, dans le CodeBehind, j'ajouté ce qui suit:
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");
}
}
Il y a évidemment des valeurs codées en dur comme le chemin de sauvegarde, mais de cela, vous devriez pouvoir créez le système dont vous avez besoin.
Est-ce AS2 ou AS3? –
Ce serait AS3. – EfficionDave