1

私はビットマップデータを持っています。URLLoaderを使ってサーバーにアップロードしたいです。私は多くの方法を試しましたが、結果はありませんでした。これは、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 にエンコードします。その後、サーバー上のファイル「uploadFile.php」にjpgバイトを送信しようとします。しかし、エラーも肯定的な結果もありません。提案/アドバイスに感謝します。

4

2 に答える 2

5

これは以前に使用した AS3 コードです。これにより、リクエスト本文にバイナリ データを含む POST リクエストが作成されます。

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

.dataFormat を BINARY に、または .method を POST に設定していないことに気付きました。

セキュリティ上の問題が発生している可能性があることに注意してください。ユーザーのアクション (ボタンのクリックなど) に応じて、このようなコードを実行する必要があるケースを見てきました。

また、サーバー ログをチェックして、リクエストがサーバーに送信されているかどうかを確認する必要があります。完全修飾 URL (http:// で始まる) がない場合、サーバーは PHP ファイルを SWF ファイルと同じ場所から提供すると想定することに注意してください。

于 2012-01-13T20:12:01.327 に答える
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();
于 2012-01-14T00:16:33.047 に答える