Flex / Air文件拖动:如何限制文件类型?

时间:2011-03-14 01:38:09

标签: drag-and-drop flex4 air file-format

我正在使用<S:nativeDragDrop>并将文件拖过组件,如下所示:

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

我不确定如何限制可以拖动哪种类型的文件。这有本机控制吗?帮助文档提到了定义完全不同的ClipboardFormats的可能性,但我不知道如何做到这一点;我也可以在文件名上运行正则表达式,但这似乎过于复杂。 想知道是否有类似FileReference.browse指定特定文件扩展名的方法

1 个答案:

答案 0 :(得分:2)

据我所知,没有内置的方法来过滤掉删除的文件。但是,在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。