0

我用 javascript 和 php 编写了一个下载脚本。它可以工作,但如果我想下载一个大文件(例如 1GB zip 文件),它的请求时间太长了。我认为这与我阅读文件有关。如果是这样,知道如何更快地获得它吗?
注意:我需要一个标题,强制下载图像、pdf、任何类型的文件类型的原因。

JS很简单。看这个:

function downloadFile(file){
    document.location.href = "script.php?a=downloadFile&b=."+ file;
}

PHP 很简单:

function downloadFile($sFile){
    #Main function
    header('Content-Type: '.mime_content_type($sFile)); 
    header('Content-Description: File Transfer');
    header('Content-Length: ' . filesize($sFile)); 
    header('Content-Disposition: attachment; filename="' . basename($sFile) . '"');
    readfile($sFile);
}

switch($_GET['a']){

    case 'downloadFile':
        echo downloadFile($_GET['b']);
        break;
}
4

1 回答 1

3

我猜缓冲是大文件的问题。尝试以小块(如兆字节)读取文件,并在打印每个块后调用刷新函数刷新输出缓冲区。

编辑:嗯,好的,这是您应该尝试的代码示例:

function downloadFile($sFile){
    #Main function

    if ( $handle = fopen( $sFile, "rb" ) ) {
        header('Content-Type: '.mime_content_type($sFile)); 
        header('Content-Description: File Transfer');
        header('Content-Length: ' . filesize($sFile)); 
        header('Content-Disposition: attachment; filename="' . basename($sFile) . '"');

        while ( !feof($handle) ) {
            print fread($handle, 1048576);
            flush();
        }
        fclose($handle);
    } else {
        header('Status: 404');
        header('Content-Type: text/plain');
        print "Can't find the requested file";
    }
}
于 2013-03-04T14:35:46.097 回答