2009-02-28 4 views
10

私はここにこの1のようにフラッシュAS3で作られたスケッチパッドを持っている:http://henryjones.us/articles/using-the-as3-jpeg-encoderどのようにByteArray(Flashから)といくつかのフォームデータをPHPに送ることができますか?

私はPHPでHTMLフォームフィールドからサーバーへのJPGやいくつかのデータを送信したいです。送信ボタンが押されたときにFlashムービーに画像ファイルを配信させる方法はありますか?

答えて

5

それは少しトリッキーです:あなたはそれを2つの方法のいずれかを行うことができます

Arthemは別のスレッドで、この投稿:

これは私にとって大きな助けであった: http://www.quietless.com/kitchen/upload-bitmapdata-snapshot-to-server-in-as3/

あなたを URLRequestWrapperを変更して、必要に応じてフィールド名 の名前とファイル名を挿入する必要があります。 ここに私が行ったことがあります:

bytes = 'Content-Disposition: form-data; name = "'+ $ fieldName +'"; ファイル名= " ';

はそれヘッダ のほとんどの書式はとてもサーバが ファイルアップロードとして、それを理解できない

ところで、あなたがBitmapData を持っている場合は、それをエンコードする必要があるかもしれません。 JPEGまたはPNG 最初

そして、私は通常、このソリューションを使用します。

私はImageShackのAPIを使用していないが、しかし、あなたは、ADOを使用して試してみたいことbe JPGEncoderクラス - ここでは、ユーザー名とJPGのバイト配列を渡す簡単な例ですが、それは本当に簡単です。

private function savePicToServer(bmpData:BitmapData):void 
{ 
    var jpgEncoder:JPGEncoder = new JPGEncoder(85); 
    var jpgStream:ByteArray = jpgEncoder.encode(bmpData); 

    var loader:URLLoader = new URLLoader(); 
     configureListeners(loader); 

    var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); 
    var request:URLRequest = new URLRequest(ModelLocator.BASE_URL + ModelLocator.UPLOAD_URL + "?user=" + ModelLocator.getInstance().username); 
    request.requestHeaders.push(header); 
    request.method = URLRequestMethod.POST; 
    request.data = jpgStream; 
    loader.load(request); 
} 

変数はクエリ文字列の一部として渡されることに注意してください。 URLVariablesは要求のデータプロパティに格納されているので、いくつかの人々が示唆しているように、URLVariablesを使用することはできません。これはすでにbyteArrayを渡すために使用しています。

0

HTTPServiceを使用してデータを送信できます。 Here'sチュートリアルソートの紹介。

+0

ありがとうございました! ...前にFlexを使ったことはありません。試してみます。 –

0

フレックスを使用していない場合は、データをPOST変数として渡すには、URLLoader & & URLrequestを試してください。

+0

私はすでにしています。問題は:私はいくつかのフォームデータを一緒に掲示したい。 –

2

暗号化された認証コードフォームFlashをJPGイメージとともにPHPに送信したかったのです。これをget変数に投稿するのは適切ではなかったので、私はこのようにしました。ほとんどのコードはステージスナップショットの実際の収集ですが、その特定の領域のみです。ここに関連する部分は、jpbイメージ情報の最後まで暗号化されたパスワードを書き込むwriteMultiByteの使用です。私はこの変数の長さをget変数のURL文字列を使って送信します。これにより、PHPは終わりを切り刻むように多くのことを知ることができます。

var stage_snapshot:BitmapData = new BitmapData(600, 120); 
var myRectangle:Rectangle = new Rectangle(0, 0, 600, 120); 
var myMatrix:Matrix = new Matrix(); 
var translateMatrix:Matrix = new Matrix(); 
translateMatrix.translate(-101, -33); 
myMatrix.concat(translateMatrix); 
stage_snapshot.draw(stage,myMatrix,null,null,myRectangle); 
trace ("creating JPGEncoder"); 
// Setup the JPGEncoder, run the algorithm on the BitmapData, and retrieve the ByteArray 
var encoded_jpg:JPGEncoder = new JPGEncoder(100); 
var jpg_binary:ByteArray = new ByteArray(); 
jpg_binary = encoded_jpg.encode(stage_snapshot); 
var pw = cryptoSalt.encrypt("mysecretpassword"); 
**var pwLength = pw.length; 
jpg_binary.writeMultiByte(pw,"us-ascii");** 
trace ("stage snapshot taken"); 
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream"); 
var request:URLRequest = new URLRequest("savejpg.php?length1=" + pwLength); 
request.requestHeaders.push(header); 
request.method = URLRequestMethod.POST; 
request.data = jpg_binary; 
var loader:URLLoader = new URLLoader(); 
trace ("sending pic to php"); 
loader.load(request); 
loader.addEventListener(Event.COMPLETE,finishSave); 

受けPHP:

$pwlength = $_GET['length1']; 
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"]; 
$pw = substr($jpg, - $pwlength); 
$jpg = substr($jpg,0,strlen($jpg) - $pwlength); 
$filename = 'uploads/test.jpg'; 
file_put_contents($filename, $jpg); 
file_put_contents("uploads/pw.txt",$pw); 
0

あなたはAMFPHPやZend AMFを使用することができ、私はちょうどこのようなプロジェクトを終え、私の製品は、ユーザーが製品の配色を変更することを可能にして、出力のByteArrayデータおよびその他のAS3オブジェクトをPHPに直接挿入してMySQLに挿入すると、see my projectAMFPHP

すべてのPNG透過画像がFlashによって生成され、AMFPHP、PHPに送信されてからサーバーにPNGファイルが生成されます。

関連する問題