Перетаскивание файлов Flex / Air: как ограничить типы файлов? - PullRequest
0 голосов
/ 14 марта 2011

Я использую <S:nativeDragDrop> и перетаскиваю файлы по компоненту, например так:

var arr:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;

Я не уверен, как ограничить тип файлов, которые можно перетаскивать.Есть ли нативный контроль для этого?В справочных документах упоминается возможность определения совершенно разных форматов Clipboard, но я понятия не имею, как это сделать;Я мог бы также запустить регулярное выражение для имен файлов, но это кажется слишком сложным.Интересно, есть ли способ, подобный FileReference.browse, для указания конкретных расширений файлов

1 Ответ

2 голосов
/ 01 апреля 2011

Насколько я знаю, нет встроенного способа фильтрации пропущенных файлов.Однако в вашем обработчике NATIVE_DRAG_ENTER вы можете перебирать список файлов и выбирать не принимать перетаскивание на основе их типов файлов.Или вы можете просто игнорировать неподдерживаемые типы при обработке NATIVE_DRAG_DROP.

var validTypes:Object = {png : true, jpg : true, gif : true};

function nativeDragEnter(event:NativeDragEvent):void {
    var files:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array
    for each(var file:File in files) {
        if(!validTypes[file.extension.toLowerCase()]) // Don't accept drag if any of the dropped files aren't supported.
            return;
    }
    DragManager.acceptDrag(InteractiveObject(event.target));
}

function nativeDragDrop(event:NativeDragEvent):void {
    var files:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array
    for each(var file:File in files) {
        if(validTypes[file.extension])  //accept only certain files
            processFile(file);
    }
}

В качестве примечания, я предположил, что вы работаете над приложением AIR здесь, но если нет, выПридется использовать класс FileReference вместо File.

...