请告诉我如何将目录从Windows拖放到Adobe AIR面板上。 该文件夹里面有子文件夹。子文件夹有很多文件。 我想拖动父文件夹并将其删除,以便整个结构必须上传。 请帮忙。
答案 0 :(得分:1)
上传文件夹相当容易。使用drop事件检测到drop时,会提供删除的文件列表。然后,您可以确定删除的文件是否是文件夹,如果是,则可以获取其下列出的所有文件(包括文件),如果其中任何文件是文件夹,则进一步向下递归。
基本上,adobe air将文件和文件夹视为同一个对象。
在放置事件中
var files = event.dataTransfer.getData( "application/x-vnd.adobe.air.file-list" );
var fileData = [];
for (var f = 0; f < files.length; f++)
{
if (files[f].isDirectory) {
//process this folder recursing through subfolders
} else {
//we have a file
}
}
然后,您可以根据需要递归通过将文件和文件添加到服务器的对象
答案 1 :(得分:0)
这是完整的例子。只需在应用程序初始化时调用onInit()方法。
private function onInit(event:FlexEvent):void
{
this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDrop);
}
private function onDragIn(event : NativeDragEvent):void
{
NativeDragManager.acceptDragDrop(this);
}
private function onDrop(event : NativeDragEvent):void
{
try
{
var dropfiles:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
processDroppedFiles(dropfiles);
}
catch (error : IOError)
{
trace("Error during drag-and-drop procedure.");
}
}
private function processDroppedFiles(files : Array):void
{
for each (var file:File in files)
{
if (file.isDirectory)
{
processDirectory(file);
}
else
{
processFile(file);
}
}
}
private function processDirectory(dir : File):void
{
processDroppedFiles(dir.getDirectoryListing());
}
private function processFile(file:File):void
{
trace(file);
}