我如何通过图像从Flash到ASP.NET? [英] How do I Pass an Image from Flash to ASP.NET?

查看:133
本文介绍了我如何通过图像从Flash到ASP.NET?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

快速的版本:

我如何获得用户的浏览器生成回服务器,一个形象?

How do I get an image that was generated on the users browser back to the server?

目前的计划是这样的:

  1. 的Flash开发者将位图转换成JPEG
  2. 在他随后会将该JPEG到一个网站上的页面。
  3. 我想我可以创建一个的WebService 这将使用的StreamReader 阅读帖子,并将其保存为一个文件。
  1. The Flash developer will convert the bitmap to JPEG
  2. He will then POST the JPEG to a page on the site.
  3. I'm thinking I can create a WebService which will use a StreamReader to read the post and save it as a file.

将这项工作?任何现有的code /样品,这样做呢?

Would that work? Any existing code/samples for doing this?

我想我们应该能看到code做任何文件上传到ASP.NET。

I suppose we should be able to look at code for doing any file upload to ASP.NET.

推荐答案

在这个例子中,我创建与舞台上的一个按钮,一个Flash文件。当您单击该按钮,闪光灯发出的按钮图像,节省出来为JPEG的ASPX文件。正如你将看到,这是通过绘制完成的的DisplayObject 的BitmapData 对象,因此,您可随意更换引用到按钮与任何一个继承自的DisplayObject (包括电影剪辑,其中包含画布涂料的应用等)。

In this example, I've created a Flash file with a button on the stage. When you click that button, the Flash sends the image of the button to an ASPX file which saves it out as a JPEG. As you'll see this is done by drawing the DisplayObject into a BitmapData object and as such, you can easily replace the reference to the button with anything that inherits from DisplayObject (including a movie clip that contains the canvas for a paint application etc).

我先带你通过Flash元素,然后在.NET后端。

I’ll walk you through the Flash element first and then the .NET backend.

闪存

要发送生成的图像像这样从Flash到ASP.NET(或任何其他后端),你将需​​要一些第三方库。我们需要一个JPEG恩codeR(其中闪存所没有的,但是最近的Flex的版本做的),我们可以从AS3核心库的 HTTP://$c$c.google.com/p/as3corelib/ 。我们还需要一个base64连接codeR用于通过网络发送的数据。我将使用在 http://dynamicflash.com/goodies/base64/

To send a generated image like this from Flash to ASP.NET (or any other backend) you’re going to need a couple of 3rd party libraries. We’ll need a JPEG Encoder (which Flash doesn’t have, but recent versions of Flex do) which we can get from the AS3 Core Lib http://code.google.com/p/as3corelib/. We’ll also need a base64 encoder for sending the data over the wire. I’ll use the one from Dynamic Flash, available at http://dynamicflash.com/goodies/base64/.

下载这些并提取他们在您的硬盘上的某个地方明智的(如C:\ lib文件夹)。

Download these and extract them somewhere sensible on your hard disk (like a C:\lib folder).

我创建了一个新的AS3的Flash文件并将其保存为的 uploader.fla 的。我添加了一个按钮组件到舞台上,并把它命名为 btnUpload 的。接下来,我编辑的动作设置,并增加我的 C:\ LIB 的文件夹添加到类路径中。然后,我给了文件的上传的类名和保存的文件。

I created a new AS3 Flash file and saved it as uploader.fla. I added a button component to the stage and named it btnUpload. Next I edited the ActionScript settings and added my c:\lib folder to the classpath. Then I gave the document a class name of Uploader and saved the file.

接下来,我创建了一个ActionScript文件,并添加以下code到它:

Next, I created an ActionScript file and added the following code to it:

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);
        }
    }
}

我保存这个文件旁边FLA名为 Uploader.as 的。

我发布的SWF到我的Asp.NET网站的根目录。 这code假设你要上传的JPEG格式的100%的质量,而将接收数据的脚本被称为upload.aspx,位于该站点的根目录。

I published the SWF into the root of my Asp.NET website. This code assumes you want to upload the jpeg with a quality of 100% and that the script which will receive the data is called upload.aspx and is located in the root of the site.

ASP.NET

在我的网站的根目录下我创建了一个名为upload.aspx Web窗体。在.aspx文件,我删除了所有的页面指令分开的内容。它的内容是这样的:

In the root of my website I created a WebForm named upload.aspx. In the .aspx file, i removed all the content apart from the page directive. It’s content look like this:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %>

则在C $ cBehind的$,我增加了以下内容:

Then in the CodeBehind, I added the following:

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");
    }
}

有明显的硬codeD值,如保存路径,但这个,你应该能够创造任何系统,您需要。

There are obviously hard-coded values such as the save path but from this you should be able to create whatever system you require.

这篇关于我如何通过图像从Flash到ASP.NET?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆