2012-01-13 5 views
1

私はbitmapDataを持っています。 URLLoaderを使用してサーバーにアップロードします。私は多くの方法を試しましたが、結果はありませんでした。 これは、ActionScript 3で私の現在のコードです:BitmapDataをサーバー(ActionScript 3)にアップロードする方法は?

import flash.net.URLLoader; 
import flash.net.URLRequest; 
import mx.graphics.codec.JPEGEncoder; 
... 
var jpg:JPEGEncoder = new JPEGEncoder(); 
var myBytes:ByteArray = jpg.encode(bitmapData); 
var uploader:URLLoader = new URLLoader(); 
var request:URLRequest = new URLRequest("uploadFile.php"); 
request.contentType = "application/octet-stream"; 
request.data = myBytes; 
uploader.load(request); 

私は、オブジェクトのBitmapDataを取り、JPGにそれをエンコードします。その後、jpg-bytesをサーバー上の "uploadFile.php"ファイルに送信しようとします。しかし、エラーも肯定的な結果もありません。 提案/アドバイスに感謝します。

答えて

5

これは私が前に、このために使用されてきたAS3コードである - これは、リクエストボディ内のバイナリデータを持つPOSTリクエストを行う:私はあなたがBINARYに.dataFormatを設定していないことに気づく

var url_request:URLRequest = new URLRequest(); 
url_request.url = "http://server.com/upload.php"; 
url_request.contentType = "binary/octet-stream"; 
url_request.method = URLRequestMethod.POST; 
url_request.data = myByteArray; 
url_request.requestHeaders.push(
new URLRequestHeader('Cache-Control', 'no-cache')); 

var loader:URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.BINARY; 
// attach complete/error listeners 
loader.load(url_request); 

かメソッドをPOSTにします。

セキュリティ上の問題が発生している可能性があります。私は、このようなコードが(ボタンクリックのような)ユーザーアクションに応答して実行されなければならないケースを見てきました。

また、サーバーログを調べて、要求がサーバーに要求しているかどうかを確認する必要があります。完全修飾URL(http://で始まる)がなければ、サーバーはSWFファイルと同じ場所からPHPファイルを提供していることに注意してください。

0

jpgデータにはASCII以外の文字が含まれているため、画像のエンコーディングが問題になります。
contentTypeタイプを "image/jpeg"に変更すると修正されますが、このステートメントはテストされません。

JPGをサーバーに送信すると、まずbase64でエンコードしてからサーバー側でデコードします。

import mx.utils.Base64Encoder; 

var b64:Base64Encoder = new Base64Encoder() 
b64.encodeBytes(myBytes) 
var encodedb64.toString(); 

request.data = b64.toString(); 
関連する問題