2009-12-26 2 views
0

Flash Player 10 및 Flex SDK 3.4를 사용했습니다. 다음과 같은 코드 : 나는 대화 상자에서 일부 파일을 선택할 때 만 imageSelectCancelCallback 핸들러가 호출되는 FileReference.load()가 예외로 적용되지 않음

// 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]); 
} 

. 그러나 load/open/io_error 핸들러는 전혀 호출되지 않습니다. Google에 FileReferenceList 대신 FileReference를 사용하는 코드 예제가 있습니다. 그 이유를 모르겠다. 제발 나를 도울 수 있겠 니?

+0

yor 코드를 올바르게 포맷 하시겠습니까? – poke

+0

위의 코드를 프로젝트에 복사하면 예상대로 정확하게 작동합니다. 확인을 클릭하면 선택 핸들러가 호출되고 개별 파일이로드 된 후로드 핸들러가 호출됩니다. –

답변

0

FileReference 대신 FileReferenceList을 사용하는 주된 이유는 여러 파일을 동시에 업로드해야하는 경우입니다. 한 번에 하나의 파일 만 업로드 할 수있게하려면 FileReference을 사용하면됩니다.

파일 브라우저에서 일부 파일을 선택하고 확인을 클릭하면 imageSelectCallback()imageSelectCancelCallback()이 아닌 일부 설명이 호출되어야합니다. imageSelectCancelCallback()은 취소를 클릭 할 때만 호출됩니다.

이외에는 load() API를 사용하지 않았지만 upload(URLRequest) API를 사용했습니다. 사용 사례가 무엇인지 잘 모르겠지만 서버에 이미지를 업로드해야하는 경우 upload() 메서드를 사용해야합니다.

업로드 이벤트와 관련하여 Event.COMPLETE 이벤트를 수신 할 때 안정성 문제가 발생하여 실제로는 DataEvent.UPLOAD_COMPLETE_DATA을 듣는 것이 더 좋은 결과를 얻었습니다.

1

플렉스에 대한 컴파일러 설정에서 "특정 버전 사용"에 대해 10.0.0 이상이 있는지 확인하십시오.

2

fileReferenceList의 개체는 fileList[i].load() 일 때 전체 이벤트를 실행하지 않습니다. Flex 프로젝트에서는 잘 작동합니다. Adobe는 이에 대한 버그 보고서에 적절히 응답하지 않았습니다.

관련 문제