‘PHP’ カテゴリーのアーカイブ

Flashからアップロードする方法いろいろ

2010 年 10月 18 日 月曜日 kosuke

Flashからアップロードする方法を調べたのでまとめ。

ファイルリファレンスでファイルのアップロードする。
ローカルファイルをアップロードするならこの方法。

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);
?>