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

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

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

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


person Damon    schedule 14.03.2011    source источник


Ответы (1)


Насколько мне известно, встроенного способа фильтрации сброшенных файлов нет. Однако в обработчике 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.

person Matt Richard    schedule 01.04.2011