Download 然后 download_f-6ren">
gpt4 book ai didi

javascript - 如何知道用户是否下载了文件

转载 作者:行者123 更新时间:2023-11-29 21:20:58 26 4
gpt4 key购买 nike

我有一个 PHP 文件,它有一个按钮,我想通过它下载一个文件,我想尝试使用 AJAX 调用 PHP,(因为我觉得它更安全),目前,我有以下代码...

<a onclick="download_file (<?= $row["id"]?>)">Download</a>

然后 download_file 的函数如下所示:

function download_file (fileid)
{
$.ajax
({
type: "POST",
url: 'download.php',
data: {id: fileid},
success: function(data)
{
window.location = 'download.php?link='+data;
}
});
}

现在它所做的是它首先调用 download.phpfileid 的 POST 请求(以保持位置更安全) 以便脚本从数据库中获取文件的位置并将其作为 data 变量返回给 AJAX 脚本。

接下来是在 success 函数中,再次调用 download.php 但这次是用 GET 请求,然后搜索文件,重命名 (就像在服务器中一样,它们有随机文件名)然后下载... PHP 代码是:

header("Cache-Control: private");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$file."");
header("Content-Transfer-Encoding: binary");
header("Content-Type: binary/octet-stream");
readfile ($link);

现在,一切正常,我关心的是安全性,我想让文件更安全,我想要生成一个随机且唯一的下载链接,下载完成后,该链接将被处理掉,但是文件保持不变......我想到了一种方法来创建一个带有另一个地址的临时文件并使用cron作业删除临时文件,但是对于cron的特定时间间隔量来说,这会提供一段时间的窗口jobs,下载链接将是静态的,这对站点不利...我希望单个链接只对单个下载有效,(但链接应该在整个下载过程中都存在,即 RESUME SHOULD得到支持)。

或者,如果可能的话,我是否也可以为此使用身份验证,比如如果用户已登录,下载链接将处于事件状态,但一旦用户退出应用程序并打开下载链接,它就会提示用户登录或显示 404 错误...

而且我还想就如何通过任何其他方法提高其安全性提出建议......

最佳答案

您需要创建一个代理,它会在您的 download.php 被调用之前被调用。基本上你的代理会做以下事情:

  1. 根据您的 session 对用户进行身份验证。
  2. 生成一个唯一的下载链接。为此,您必须在您的用户和新生成的链接之间维护某种映射。
  3. 将这个新生成的链接作为参数传递给您的 success 回调函数。
  4. 对 download.php 链接的 AJAX 调用将开始下载文件。您应该使用您在用户和数据库或其他地方的下载链接之间创建的映射再次对 download.php 的使用进行重新验证。我更喜欢使用数据库,因为您必须维护一些下载历史记录。
  5. 下载完成后,如果用户再次尝试访问此 URL,请将此映射标记为在您的数据库中处于非事件状态并重定向到某种 404 页面或其他内容。

希望这对您有所帮助!

关于javascript - 如何知道用户是否下载了文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38569594/

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