【问题标题】:Check remote file existance with Flex 3使用 Flex 3 检查远程文件是否存在
【发布时间】:2010-11-15 08:38:51
【问题描述】:

在 Flex 3/AS 3 中,检查远程文件是否存在的好方法是什么? 我正在考虑以 PHP 方式尝试“打开”远程路径(如“http://example.com/somefile.exe”),看看它是否有效。我不是要求只下载所有文件,我只是想知道该文件是否存在(并且可以访问)。

【问题讨论】:

  • 文件在哪里,它是什么(即上面示例中 http 链接末尾的 windows exe - 顺便说一句,这很奇怪)?根据答案,您将有几个选择。
  • 就我而言,是 http 但不是,不是 exe。它将是一个电影文件,可能是 .mp4、.flv 或类似文件。
  • 我不得不说,看这个老问题,这不是我今天要问的。网络上的文件存在,当谈论 http 时,当然应该由 http 协议处理。即,如果您收到 404,则该页面不存在。如果您收到其他响应,例如服务器错误、访问被拒绝等,请处理最适合您的事情。

标签: actionscript-3 http flex3 stream


【解决方案1】:

我开发了一个实用程序类来处理检查文件是否存在的天气。这是代码: https://github.com/eladelrom/eladlib/blob/master/EladLibFlex/src/com/elad/framework/utils/FileExistsUtil.as

实现如下所示:

var fileExists:FileExistsUtil = new FileExistsUtil();
fileExists.checkFile("file.jpg", 
function(eventType:String):void
{
 trace(eventType);
}, 
function(errorType:String, text:String):void
{
 trace(errorType+": "+text);
});

【讨论】:

  • 链接现在固定指向github上的项目位置
【解决方案2】:

这是我为这份工作找到的最佳代码

var urlStream:URLStream = new URLStream();
urlStream.addEventListener(Event.OPEN, streamHandler);
urlStream.addEventListener(IOErrorEvent.IO_ERROR, streamHandler);
urlStream.load(new URLRequest("SOME_FILE"));

function streamHandler(e:Event):void {
    urlStream.close();
    if(e.type == Event.OPEN){
        trace("FILE EXISTS");
    } else if(e.type == IOErrorEvent.IO_ERROR){
        trace("FILE DOES NOT EXIST");
    }
}

【讨论】:

    【解决方案3】:

    您可能需要尝试加载文件。如果您收到 IOError,则该文件不存在(或您的路径错误)。如果它开始加载,通过触发一个进度事件,那么它就存在了。然后您可以取消剩余的加载。

    或者,您可以尝试从 Flash 调用 PHP 脚本来执行您所描述的操作,这可能会返回一个简单的真/假。

    【讨论】:

    • 问题是,如果该文件不存在,Web 服务器会返回一个 404 页面或类似的页面(实际上在我的情况下,返回首页......爆炸的 URL 重写等),从技术上讲该页面将被成功下载。我正在寻找一个与您的替代方案接近的解决方案 - 我正在检查服务器端(在这种情况下使用 PHP)文件是否存在 - 并且只是在 flashvars 中添加一个“找不到文件”参数。这意味着检查并没有真正发生在 Flash 客户端应用程序中。我想这对我来说已经足够了。
    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多