2009年11月4日
Flash内で作成した複数画像を同時にアップロードする
こんにちは、中川です。
つい最近、「Flashで作成した画像(jpg)をサーバ側にアップロードする」ということが必要になることがありました。
普通に画像1個であれば簡単なのですが、今回は複数同時にアップしたいという状況でした。
連続してのアップロードや、zip圧縮、画像を結合してなど様々な方法を教えていただいたりしたのですが、サーバ側の処理をいかに通常処理、かつ楽するかの部分でいろいろ探したところ、
「HTTPPostBinary」というas3のライブ ラリで実現することができそうですので、ご紹介したいと思います。
こちらを利用するとAS側のプログラムも特に面倒ということもなさそうです。
それでは、早速試してみましょう。
「HTTPPostBinary class connects your flash program to general webservice」から「HTTPPostBinary.as」をダウンロードしてFlexプロジェクト内に配置します。
で、実際に使いかたも、上記ブログ記事のとおり、
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http://www.flickr.com/tools/uploader_go.gne");
var httpdata:HTTPPostBinary = new HTTPPostBinary();
httpdata.addBinary("photo", jpegDat, "image/jpeg", "snap.jpg");
request.contentType = httpdata.contentType;
request.method = httpdata.method;
request.data = httpdata.encodeData();
loader.load(request);
このように簡単に利用できます。
以下、ボタンを押したら2種類のサイズの画面イメージをサーバにPOSTするサンプルです。
今回のサンプルの構成は以下のようになっています。
UploadFlex.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.graphics.codec.JPEGEncoder;
import ym.net.HTTPPostBinary;
public function upload():void {
//1個目の画像
var bmd:BitmapData = new BitmapData(100, 200, false, 0xFFFFFF);
bmd.draw(this);
var encoder1:JPEGEncoder = new JPEGEncoder(100);
var bytes1:ByteArray = encoder1.encode(bmd);
//2個目の画像
var bmd2:BitmapData = new BitmapData(50, 50, false, 0xFFFFFF);
bmd2.draw(this);
var