gpt4 book ai didi

javascript - HTTP 文件下载 : Monitoring Download Progress

转载 作者:可可西里 更新时间:2023-10-31 22:12:06 26 4
gpt4 key购买 nike

我遇到的情况是,我必须通过 HTTP 协议(protocol)从 Web 服务器:Apache 2.4.4 下载大文件(最大 4GB)。我尝试了几种方法,但最好的解决方案看起来是使用 X-SendFile 模块。

由于我为文件上传提供了进度条,因此我需要为文件下载提供相同的功能。所以这是我的问题:

  • 是否有任何方法(包括解决方法)来实现文件下载进度监控?
  • 是否有任何方法(包括变通方法)来计算文件下载传输速度?
  • 有没有比使用 X-Sendfile 模块更好的方法来从网络服务器提供高效的文件下载?

一般来说,是否有更好的文件下载选项,可以让我监控文件下载进度?它可以是客户端 (JavaScript) 或服务器解决方案 (PHP)。是否有任何特定的 Web 服务器允许这样做?

目前我使用:

  • Apache 2.4.4
  • Ubuntu

多次感谢。

最佳答案

2 个想法(未验证):

首先:

不要在页面上放置指向文件(您要下载的文件)的常规链接,而是放置诸如.../dowanload.php 之类的链接,它可能看起来像这样:

<?php

// download.php file
session_start(); // if needed

$filename = $_GET['filename']);

header( 'Content-type: text/plain' ); // use any MIME you want here
header( 'Content-Disposition: attachment; filename="' . htmlspecialchars($filename) . '"' );
header( 'Pragma: no-cache' );

// of course add some error handling

$filename = 'c:/php/php.ini';

$handle = fopen($filename, 'rb');

// do not use file_get_contents as you've said files are up to 4GB - so read in chunks
while($chunk = fread($handle, 1000)) // chunk size may depend on your filesize
{
echo $chunk;
flush();
// write progress info to the DB, or session variable in order to update progress bar
}

fclose($handle);
?>

这样您就可以关注您的下载过程。同时,您可以将进度信息写入 DB/session var 并使用 AJAX 从 DB/session var 更新进度条读取状态,当然轮询读取进度信息的脚本。

这非常简单,但我认为它可能会如您所愿。

第二:

Apache 2.4 内置了 Lua 语言:

我打赌你可以尝试编写 LUA Apache 处理程序来监控你的下载 - 将进度发送到数据库并使用 PHP/AJAX 从数据库获取进度信息来更新进度条。

同样 - 有用于 perl 甚至 python 的模块(但不是用于 win)

关于javascript - HTTP 文件下载 : Monitoring Download Progress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19525492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com