imageのupload

Airから画像ファイルをアップロードします。

まずBitmapData作成。Matrixで縮小してます。

var bmd:BitmapData = new BitmapData(target.width, target.height);
var m:Matrix = new Matrix();
m.createBox(50/target.width,50/target.height);
bmd.draw(target,m);

BitmapDataをエンコードします。
encodeは、
http://kinsentansa.blogspot.com/2010/09/flexpng-blooddypng24encoderalchemy.html
を参考に、爆速!のPNG24Encoderを使いました。

var ba:ByteArray = PNG24Encoder.encode(data);
var decodeStr:String = Base64.encode(ba);

サーバ(Jetty)にPOSTします。

// create request
var request:URLRequest = new URLRequest();
request.url = "http://localhost/hoge/image"
request.method = URLRequestMethod.POST;
			
// params
var params:URLVariables = new URLVariables();
params.decode_str = decodeStr;
request.data = params;
		
// load
var loader:URLLoader = new URLLoader( request );
loader.addEventListener(Event.COMPLETE, onImageUploadComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, onImageUploadIOError);

servletは、初scalaです。
decodeは、commons.codecです。
Fileの書き込みは、commons.ioです。

override def doPost(req:HttpServletRequest, res:HttpServletResponse) {
  var contextRoot = getServletContext().getRealPath("/");
  var decodeStr = req.getParameter("decode_str");
  var decodeByte = Base64.decodeBase64(decodeStr);
  var imagePath = contextRoot + "/upload/images/" + "hoge.png"
  FileUtils.writeByteArrayToFile(new File(imagePath), decodeByte);
}

今後はscalaで実装するので、慣れないとなー。
もっと書かなきゃ。