gpt4 book ai didi

javascript - 使用我的 PHP 网站记录谁从 S3 下载了哪些文件

转载 作者:行者123 更新时间:2023-11-28 17:37:08 26 4
gpt4 key购买 nike

我有一个网站,允许用户使用预签名 URL 从 S3 安全下载文件,但我想记录下载文件的人员和时间。

我尝试过将它们重定向到另一个页面,然后使用一段 JavaScript 自动下载文件,然后将记录插入数据库表中,但是一旦脚本运行,它就会停止其​​余部分页面加载阻止其重定向回来。

我使用的 JavaScript 如下:

<script>window.location.href = “url”</script>

可以吗?

最佳答案

我建议您在将文件返回给用户之前在 PHP 层记录下载。您可以从 session 中获取所需的信息,例如 IP 地址或用户信息,将其存储在数据库中,然后将适当的 header 发送回用户并开始文件下载。您不需要将用户重定向到新页面。

编辑:

例如,在 downloads.php 上,您可以:

<?php

// 1) Get the information that you would like to log
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
$username = $_SESSION['username'];
// ...
// 2) Store the information on your database
// For example, add a MySQL INSERT here
// ...
// 3) Return the appropriate file to the user
// Code extracted from https://stackoverflow.com/questions/6175533/
$attachment_location = $_SERVER["DOCUMENT_ROOT"] . "/file.zip";
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for internet explorer
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: attachment; filename=file.zip");
readfile($attachment_location);
die();
} else {
die("Error: File not found.");
}

有关 PHP $_SESSION 和 $_SERVER 的更多信息:
PHP $_SESSION
PHP $_SERVER

编辑2:

另一个可能有用的 header 组合:

header("Content-Disposition: attachment; filename=" . urlencode($file));    
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($file));

有关 PHP header 的更多信息:
PHP Headers

关于javascript - 使用我的 PHP 网站记录谁从 S3 下载了哪些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894691/

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