开发者

Flex/Air file dragging: how to restrict filetypes?

I'm using a <S:nativeDragDrop> and getting files dragged over a component like so:

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

I'm not sure how to restrict what type of files can be dragged. Is there a native control for this? The help documents mention the possibility of defining completely different ClipboardFormats, but I have no idea how to do that; I could run regex on the filenames as well, but that seems overcomplicated. Wondering if there's a way lik开发者_开发知识库e with FileReference.browse to specify specific file extensions


As far as I know, there is not a built-in way to filter dropped files. However, in your NATIVE_DRAG_ENTER handler, you could loop through the list of files and choose not accept the drag based on their file types. Or, you could merely ignore the unsupported types when you are processing the 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);
    }
}

As a side note, I assumed you are working on an AIR app here, but if you aren't, you'll have to use the FileReference class instead of File.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜