1

画像アップローダーを実行しようとしています。ユーザーは次のことができます。
- button.browse でローカル ファイルを参照
- 1 つを選択して FileReference として保存します。
- 次に FileReference.load() を実行し、データを画像コントロールにバインドします。
- 回転させて画像のデータを変更した後。
- そして最後にサーバーにアップロードします。

画像のデータを変更するには、表示された画像のマトリックスを取得して変換し、新しいマトリックスを再利用して古い画像にバインドします。

private function TurnImage():void
{ 
    //Turn it
    var m:Matrix = _img.transform.matrix;
    rotateImage(m);
    _img.transform.matrix = m;
}

ここでの問題は、データをファイルとしてサーバーに送信する方法が本当にわからないということです。これは、ファイル参照に保存されておらず、ファイル参照内のデータが読み取り専用であるため、変更したり、新しいものを作成したりできないためです。 '.upload(); を使用しないでください。

次に、HttpService.send を試しましたが、mxml ではなくファイルを送信する方法がわかりません。

4

1 に答える 1

5

次のように、URLLoader を使用して Binary ByteArray をサーバーに送信できます。

var urlRequest : URLRequest = new URLRequest();
urlRequest.url = 'path to your server';
urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = UploadPostHelper.getPostData( 'image.jpg', byteArray );
urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );

// create the image loader & send the image to the server:<br />
var urlLoader : URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load( urlRequest );

最初に画像のビットマップデータを取得します:

// set up a new bitmapdata object that matches the dimensions of the captureContainer;
var bmd : BitmapData = new BitmapData( captureContainer.width, captureContainer.height, true, 0xFFFFFFFF );

// draw the bitmapData from the captureContainer to the bitmapData object:<br />
bmd.draw( captureContainer, new Matrix(), null, null, null, true );

次に、byteArray を取得します。

var byteArray : ByteArray = new JPGEncoder( 90 ).encode( bmd );

上記の URLLoader コードを使用して、画像をサーバーに送信します。

FileReference.upload から得られるようなファイル アップロードの進行状況が得られないことを除けば、問題なく動作します。URLLoader を使用してアップロードの進行状況を機能させることができる場合は、ここに回答を投稿してください。

于 2009-10-04T16:36:34.933 に答える