0

Flash Player 10 と Flex SDK 3.4 を使用しました。次のようなコード:

// Following comes callbacks
function imageLoadOpenCallback(evt:Event):void
{
    trace("in--open");
}

function imageLoadCompleteCallback(evt:Event):void
{
    trace("in--load");
    var fr:FileReference = evt.target as FileReference;
    trace(fr.data);
}

function imageLoadErrorCallback(evt:IOErrorEvent):void
{
    trace("in--ioerror");
}

function imageSelectCancelCallback(evt:Event):void
{
    trace("in cancel");
}

function imageSelectCallback(evt:Event):void
{
    trace("in -- select");
    for (var i:int=0; i<frl.fileList.length; i++)
    {

        frl.fileList[i].addEventListener(Event.OPEN, imageLoadOpenCallback);
        frl.fileList[i].addEventListener(Event.COMPLETE, imageLoadCompleteCallback);
        frl.fileList[i].addEventListener(IOErrorEvent.IO_ERROR, imageLoadErrorCallback);
        frl.fileList[i].load();
        trace(frl.fileList[i]);
        trace(frl.fileList[i].creationDate);
        trace(frl.fileList[i].creator);
        trace(frl.fileList[i].data);
        trace(frl.fileList[i].name);
    }   
}


// Following comes UI handlers
function onAddPictures():void
{
    var imageFilter:FileFilter = new FileFilter("Images", "*.jpg;*.png");
    frl.addEventListener(Event.SELECT, imageSelectCallback);
    frl.addEventListener(Event.CANCEL, imageSelectCancelCallback);
    frl.browse([imageFilter]);
}

ダイアログでいくつかのファイルを選択すると、imageSelectCancelCallback ハンドラーのみが呼び出されます。しかし、load/open/io_error ハンドラはまったく呼び出されません。FileReferenceList の代わりに FileReference を使用した Google のコード例があります。原因がわかりません、教えていただけないでしょうか?

4

3 に答える 3

2

エアでは、fileReferenceオブジェクトはfileReferenceList実行時に完全なイベントを発生させませんfileList[i].load()。Flexプロジェクトでは、正常に機能します。アドビは、これに関するバグレポートに適切に対応していません。

于 2010-10-12T02:57:57.377 に答える
1

flex のコンパイラ設定で、「特定のバージョンを使用する」に少なくとも 10.0.0 があることを確認してください。

于 2010-03-24T21:40:36.883 に答える
0

FileReferenceList代わりに使用する主な理由はFileReference、一度に複数のファイルをアップロードする必要がある場合です。一度に1つのファイルのみのアップロードを許可する場合は、を使用しますFileReference

いくつかの説明:ファイルブラウザでいくつかのファイルを選択し、[OK]をクリックすると、ではなく、が呼び出されるはずですimageSelectCallback()。[キャンセル]をクリックしたときにのみ呼び出されます。imageSelectCancelCallback()imageSelectCancelCallback()

それ以外は、APIを使用したことはありませんが、load()APIを使用しましたupload(URLRequest)。ユースケースはわかりませんが、サーバーに画像をアップロードする必要がある場合は、このupload()方法を使用する必要があります。

アップロードイベントと言えば、イベントを聞いているときに信頼性の問題が発生したEvent.COMPLETEので、実際に聞いた方が良い結果が得られましたDataEvent.UPLOAD_COMPLETE_DATA

于 2009-12-27T09:27:40.963 に答える