为了账号安全,请及时绑定邮箱和手机立即绑定

如何在php中将来自不同用户的相同文档上传到服务器?

如何在php中将来自不同用户的相同文档上传到服务器?

PHP
不负相思意 2022-07-16 10:26:53
用户 A 进入 Web 应用程序并上传“info.pdf”文档。同时,在另一台计算机上进入 Web 系统的用户 B 与用户 A 同时上传文档“info.pdf”。由于两者具有相同的名称,我想知道实施的最佳策略是什么这些文件保留在服务器上的一个目录中,在数据库中与上传它的用户相关联,然后每个用户都可以恢复您上传的文件。实现这个主题的最有效方法是什么?应该在每个文件名中添加什么,以便这些名称是唯一的并且在复制到服务器上的目标目录时没有问题?
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以在文件名之前使用时间戳、下划线、用户 ID,例如

$filename=time()."_".$UserId.$yourFileName

您可以将会话中的用户 ID 和 $_FILES 中的文件名

然后每个文件都有唯一的名称。


查看完整回答
反对 回复 2022-07-16
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

在这种情况下,策略会很简单。您可以在将文件上传到存储之前覆盖文件名,并将真实名称和生成的名称存储在数据库中,用户主键在表中。之后,您可以简单地在 HTML5 下载属性中给他们一个带有原始文件名的链接。


看看伪代码。


<?php

$original_filename = $_FILES['file']['name'];

$filename = time() . '_' . $filename;

if(move_uploaded_file($_FILES["file"]["tmp_name"], $filename))

{

    $sql = "INSERT INTO media(user_id, file_name, original_name) VALUES ( $userId, $filename, $original_filename);

    mysqli_query($conn, $sql);

} ?>

现在您可以通过 html5 下载属性显示链接以使用原始文件名下载。


<?php

$sql = "SELECT * FROM medias where user_id = $userId LIMIT 1";

$result = mysqli_query($con, $sql);


$row = mysqli_fetch_assoc($result);


// Free result set

mysqli_free_result($result);


mysqli_close($con);

?>

<a href="<?= $row['filename'] ?>" download="<?= $row['original_filename']; ?>"><?= $row['original_filename']; ?></a>


查看完整回答
反对 回复 2022-07-16
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信