質問

クイックバージョン:

ユーザーのブラウザ上で生成された画像をサーバーに戻すにはどうすればよいですか?

現在の計画は次のとおりです。

  1. Flash 開発者はビットマップを JPEG に変換します。
  2. 次に、JPEG をサイト上のページに POST します。
  3. を作成できると思います。 WebService を使用します StreamReader 投稿を読み、ファイルとして保存します。

それはうまくいきますか?これを行うための既存のコード/サンプルはありますか?

ASP.NET へのファイルのアップロードを実行するためのコードを確認できるはずだと思います。

役に立ちましたか?

解決

この例では、ステージ上にボタンを含む Flash ファイルを作成しました。そのボタンをクリックすると、Flash はボタンの画像を A​​SPX ファイルに送信し、JPEG として保存します。ご覧のとおり、これは次のように描画することで行われます。 DisplayObjectBitmapData オブジェクトなので、ボタンへの参照を継承したものに簡単に置き換えることができます。 DisplayObject (ペイント アプリケーションなどのキャンバスを含むムービー クリップを含む)。

最初に Flash 要素について説明し、次に .NET バックエンドについて説明します。

閃光

このように生成された画像を Flash から ASP.NET (またはその他のバックエンド) に送信するには、いくつかのサードパーティ ライブラリが必要になります。AS3 Core Lib から取得できる JPEG エンコーダ (Flash にはありませんが、Flex の最近のバージョンにはあります) が必要です。 http://code.google.com/p/as3corelib/. 。有線でデータを送信するための Base64 エンコーダーも必要です。ここでは、Dynamic Flash のものを使用します。 http://dynamicflash.com/goodies/base64/.

これらをダウンロードし、ハードディスク上の適切な場所 (C:\lib フォルダーなど) に抽出します。

新しい AS3 Flash ファイルを作成し、次のように保存しました。 アップローダー.fla. 。ステージにボタンコンポーネントを追加し、名前を付けました btnアップロード. 。次に、ActionScript 設定を編集し、 c:\lib フォルダーをクラスパスに追加します。次に、ドキュメントにクラス名を付けました アップローダー そしてファイルを保存しました。

次に、ActionScript ファイルを作成し、次のコードをそれに追加しました。

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 の隣に保存しました。 アップローダー.as.

SWF を Asp.NET Web サイトのルートに発行しました。このコードは、JPEG を 100% の品質でアップロードすること、およびデータを受信するスクリプトが Upload.aspx という名前でサイトのルートにあることを前提としています。

ASP.NET

Web サイトのルートに、upload.aspx という名前の Web フォームを作成しました。.aspx ファイルで、ページ ディレクティブを除くすべてのコンテンツを削除しました。内容はこんな感じです。

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

次に、分離コードに次のコードを追加しました。

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

保存パスなどの値は明らかにハードコードされていますが、そこから必要なシステムを作成できるはずです。

他のヒント

あなたがイメージを操作する必要がある場合は、

、限り、あなたはバイト[]またはPOSTされたファイルのストリームを得ることができるよう、あなたは例えば、それの画像を作成することができます。

MemoryStream mstr = new MemoryStream(myByteArray);
Image myImage = Image.FromStream(mstr);

彼は、標準のHTMLフォームのようなファイルを投稿してもらいます。あなたは、次のコレクションを使用してまで彼が掲示されているページのPage_Loadイベントでそれらのファイルにアクセスすることができます。

Request.Files

これはただのFileUploadコントロールが何をするかのようにHttpPostedFilesのコレクションを返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top