Flash から ASP.NET にイメージを渡すにはどうすればよいですか?
-
06-09-2019 - |
質問
クイックバージョン:
ユーザーのブラウザ上で生成された画像をサーバーに戻すにはどうすればよいですか?
現在の計画は次のとおりです。
- Flash 開発者はビットマップを JPEG に変換します。
- 次に、JPEG をサイト上のページに POST します。
- を作成できると思います。
WebService
を使用しますStreamReader
投稿を読み、ファイルとして保存します。
それはうまくいきますか?これを行うための既存のコード/サンプルはありますか?
ASP.NET へのファイルのアップロードを実行するためのコードを確認できるはずだと思います。
解決
この例では、ステージ上にボタンを含む Flash ファイルを作成しました。そのボタンをクリックすると、Flash はボタンの画像を ASPX ファイルに送信し、JPEG として保存します。ご覧のとおり、これは次のように描画することで行われます。 DisplayObject
に BitmapData
オブジェクトなので、ボタンへの参照を継承したものに簡単に置き換えることができます。 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のコレクションを返します。