Actionscript 3 在flex web应用程序中无需用户交互即可下载多个文件?

Actionscript 3 在flex web应用程序中无需用户交互即可下载多个文件?,actionscript-3,apache-flex,download,actionscript,Actionscript 3,Apache Flex,Download,Actionscript,在提出问题之前,我说要仔细阅读问题的内容。 我正在创建用于下载视频文件的web应用程序。 我将在其中创建如下功能。用户选择要下载的多个文件。视频URL来自webservice 问题: 现在,当用户点击下载,然后打开flex中的新页面时,我需要它。现在,假设有5个文件要下载,那么它将自动开始下载第一个文件。显示下载进度。 下载完第一个文件后,开始下载第二个文件,然后下载第三个文件,依此类推 文件以浏览器的默认路径或flex代码的指定路径下载。而且文件大小可能很大。超过500 MB 我找了很多,但没

在提出问题之前,我说要仔细阅读问题的内容。 我正在创建用于下载视频文件的web应用程序。 我将在其中创建如下功能。用户选择要下载的多个文件。视频URL来自webservice

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

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

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

但是,若需要用户交互,那个么用户必须持续监视下载那个大文件,然后需要下载第二个文件

可以使用flex吗?如果是,那怎么办

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

创建一个加载文件的方法,提供一个文件路径作为参数,或者使用一个数组或向量来加载所有相应的URL。完成第一次下载后,请检查数组中是否有更多项,如果有,请加载后续索引。用户无需进行任何交互

具有init、progress和complete状态的加载程序示例

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");
}

正如你所说的,这是不可能的

在web Flash Player中,您只有2个选项:

使用FileReference/save,这要求用户选择保存文件的位置。 使用navigateToURL将浏览器指向文件位置,该位置允许浏览器决定如何处理下载-立即将其下载到默认下载目录,或由用户选择。这不太可靠。一种变体是使用ExternalInterface调用JS window.open,它是与navigateToURL等效的JS。 在这两种情况下,您都无法选择从Flex下载文件的位置,甚至无法知道他们从何处下载文件,并且在没有用户交互(如单击按钮)的情况下,您也无法使用这些选项


使用AIR desktop应用程序,您可以使用File和FileStream来完成此操作。

出于Flash player安全原因,在没有用户交互的情况下,无法在后台模式下下载文件。我为一个网络电视项目做过类似的工作,用户可以下载视频及其数百个附加文件,为此我使用了一个名为using的服务器端来下载视频文件,以及一个包含所有附加文件的zip。PHP脚本被调用了两次

为此,您可以:

PHP:

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

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


希望能有所帮助。

是否有可能显示下载进度?谢谢。在哪个路径上下载此文件?我可以更改下载路径吗?您应该替换我的字符串yourFile.png,并使用您要下载的文件的路径,可能是URL,等等。我的问题是在我的系统中哪里可以看到下载的文件。并且可能会像在桌面上那样更改该路径?如果您检查完整的侦听器将在下载完成时触发,那么,您可以保存文件并对其执行任何操作更改路径,或者您需要做什么为什么拒绝投票。如果投票被否决,请发表评论。
<?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();