Flashからアップロードする方法いろいろ
2010 年 10月 18 日 月曜日 kosukeFlashからアップロードする方法を調べたのでまとめ。
ファイルリファレンスでファイルのアップロードする。
ローカルファイルをアップロードするならこの方法。
AS
var file:FileReference = new FileReference(); //ファイルリファレンス var req:URLRequest = new URLRequest( "upload_filereference.php" ); //リクエスト先CGI file.browse(); //ファイルを選択 file.addEventListener(Event.SELECT, function( e:Event ):void{ file.upload( req ); //選択後アップロード }); |
PHP
<?php $name = $_FILES[ 'Filedata' ]['name']; $tmp = $_FILES[ 'Filedata' ]['tmp_name']; move_uploaded_file( $tmp, "./$name" ); ?> |
BASE64にエンコードしてアップロードする。
ダイナミックに生成した画像データをアップロードする例。
AS
//画像データ var bmp:BitmapData = new BitmapData( 100,100,false,0x000000 ); //PNGにエンコード var pngEncorder:PNGEncoder = new PNGEncoder(); //そのバイトデータ var bytes:ByteArray = pngEncorder.encode( bmp ); //Base64エンコード var base64Encorder:Base64Encoder = new Base64Encoder(); base64Encorder.encodeBytes( bytes ); var base64:String = base64Encorder.toString(); //リクエスト var vars:URLVariables= new URLVariables(); vars.base64 = base64; var req:URLRequest = new URLRequest( "upload_base64.php" ); req.method = URLRequestMethod.POST; req.data = vars; //送信 var loader:URLLoader = new URLLoader(); loader.load( req ); |
PHP
<?php $bas = $_POST['base64']; //BASE64エンコードテキストを受け取る $bin = base64_decode( $bas ); //デコード //ファイルに書き出す $fp = fopen( "./xxx.png", "w" ); fwrite( $fp, $bin ); fclose( $fp ); ?> |
さらにバイナリのままアップロードする方法があった。
AS
//画像データ var bmp:BitmapData = new BitmapData( 100,100,false,0x000000 ); //PNGにエンコード var pngEncorder:PNGEncoder = new PNGEncoder(); //そのバイトデータ var bytes:ByteArray = pngEncorder.encode( bmp ); //リクエスト var req:URLRequest = new URLRequest( "upload_binary.php" ); //application/octet-streamはContent-Typeヘッダにおいてバイナリ形式である場合に指定されるサブタイプ req.contentType = "application/octet-stream"; req.method = URLRequestMethod.POST; req.data = bytes; //送信 var loader:URLLoader = new URLLoader(); loader.load( req ); |
PHP
<?php /*POST受信時にphp://inputで生データを取得できる*/ $bin= file_get_contents( "php://input" ); //バイナリを受け取る //ファイルに書き出す $fp = fopen( "./xxx.png", "w" ); fwrite($fp, $bin); fclose($fp); ?> |