在 flex web 应用程序中无需用户交互就可以下载多个文件吗?

Download multiple file without user interaction in flex web application possible?

在提问之前我说正确阅读问题是什么。
我正在创建 Web 应用程序 用于下载视频文件。
我将在其中创建类似的功能。用户 select 要下载多个文件。
视频 URL 来自网络服务。

问题:
现在,我需要当用户单击 下载 然后打开 flex 中的新页面时。
现在,假设有5个文件要下载,那么它会自动开始下载第一个文件。显示下载进度。
一旦下载完成第一个文件,然后开始下载第二个文件,然后是第三个文件,依此类推。

文件下载到浏览器默认路径指定的flex代码。并且文件大小可能很大。 (超过 500 MB)。

我搜索了很多,但没有得到任何合适的解决方案。它说没有用户交互是不可能的。

但是,如果需要用户交互,则用户必须持续观看以下载那个大文件,然后需要执行下载第二个文件的操作。

是否可以使用 flex?如果是那么如何?

任何帮助将不胜感激。
谢谢,

创建一种方法来加载您的文件(提供文件路径作为参数,或者使用具有所有相应 url 的数组或向量)。完成第一次下载后,立即检查数组中是否还有更多项,如果有,则加载后续索引。用户不需要进行任何交互。

具有初始化、进度和完成状态的加载器示例。

var myLoader:Loader = new Loader();

myLoader.contentLoaderInfo.addEventListener(Event.INIT, initListener);
myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);

myLoader.load(new URLRequest("yourFile.png"));

function initListener(event:Event):void
{
    // just started the loader process
    trace("Object Initialized");
}

function progressListener (event:ProgressEvent):void
{
    trace("Downloaded " + event.bytesLoaded + " out of " + event.bytesTotal + " bytes");
}

function completeListener(event:Event):void
{    
     // here you can load the next file
     trace("Loading Completed");
}

正如您所陈述的问题,这是不可能的。

从网络 Flash Player 您只有 2 个选项:

  1. 使用 FileReference/save() 需要用户选择保存文件的位置。
  2. 使用navigateToURL()将浏览器指向文件位置,这让浏览器决定如何处理下载——立即将其下载到默认下载目录,或让用户选择。这不是那么可靠。 (这个的变体是用ExternalInterface调用JS window.open,相当于navigateToURL的JS。)

在任何一种情况下,您都无法选择从 Flex 下载文件的位置,甚至不知道他们下载文件的位置,并且在没有用户交互(例如单击按钮)的情况下您无法使用这些选项中的任何一个。

使用 AIR(桌面应用程序),您可以使用 FileFileStream

出于 Flash 播放器安全原因,无法在没有用户交互的情况下以后台模式下载文件。我从事的工作类似于您为网络电视项目所做的工作,用户可以在其中下载视频及其附加文件(数百个),为此我使用服务器端 PHP script which is called using navigateToURL() 下载视频文件和 zip其中包含所有附加文件(PHP 脚本被调用两次)。

因此,您可以这样做:

PHP :

<?php

    // some controls here

    $file = $_GET['f'];

    if (file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: '.filesize($file));
        readfile($file);
        exit();
    }

?>

动作脚本:

const download_url:String = 'http://www.example.com/download.php?f=';
var files:Array = ['01.mp4', '02.mp4', '03.mp4', '04.mp4', '05.mp4'];
var index:int = 0;

var timer:Timer = new Timer(100, files.length);
    timer.addEventListener(
        TimerEvent.TIMER, 
        function(e:TimerEvent){
            navigateToURL(new URLRequest(download_url + files[index]));
            index ++;
        }
    )
    timer.start();

当然,此代码将像用户下载的任何文件一样通过浏览器下载文件。请注意,有时浏览器会阻止下载,因为它被视为弹出窗口,因此您必须向您的用户提及这一点,以授予您的网站下载文件的权限。

此代码只是一个示例,向您展示如何做您想要的事情,可能是您没有在您的服务器中使用 PHP,因此您必须改进它并使其适应您的特定需求.

希望能帮到你。