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で実装するので、慣れないとなー。
もっと書かなきゃ。