代码之家  ›  专栏  ›  技术社区  ›  Young

如何在开始下载远程文件之前获取其大小?

  •  2
  • Young  · 技术社区  · 16 年前

    在下载远程文件之前,我需要计算出它的大小。

    var _filePath:String = "X:/save/abc.exe";
    var file:File = new File(_filePath);
    if (file.size > 1000)
    {
        trace("too large");
    }
    

    但是当我尝试远程文件时

    var _filePath:String = "http://www.aaa.com/webfile.exe";

    它不起作用。我怎么才能在使用之前得到一个远程文件的大小呢?

      var _downLoadPath:String = "http://www.aaa.com/webfile.exe";
    

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  5
  •   o15a3d4l11s2    16 年前

    我现在想到的是使用这样的进度事件:

    var downloadURL:URLRequest;
    var fileName:String = "SomeFile.pdf";
    var file:FileReference;
    
    function FileReference_event_progress()
    {
    downloadURL = new URLRequest();
    downloadURL.url = "http://www.aaa.com/webfile.exe";
    file = new FileReference();
    file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    file.download(downloadURL, fileName);
    }
    
    function progressHandler(event:ProgressEvent):void
    {
    var file:FileReference = FileReference(event.target);
    trace(event.bytesTotal);
    }
    

    此脚本将输出文件的总大小(但将在下载过程启动后输出)。您可以做的是在收到第一个文件和总大小后立即停止下载-这是我喜欢的解决方法。

    你可以尝试的另一件事是 trace(file.bytesTotal); 而不是 file.download(downloadURL, fileName); 但我不确定如果不启动下载过程,它是否可以工作,因为没有向文件发送请求。

        2
  •  2
  •   hollystyles    16 年前

    我从未使用过操作脚本,但似乎您正在通过HTTP下载文件,您要查找的是HTTP头中的内容长度。HTTP确实有一个head请求,以及更著名的get和post。如果您也能弄清楚如何发出head请求,那么您就可以解析响应头的内容长度。