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

用户 A 进入 Web 应用程序并上传“info.pdf”文档。同时,在另一台计算机上进入 Web 系统的用户 B 与用户 A 同时上传文档“info.pdf”。由于两者具有相同的名称,我想知道实施的最佳策略是什么这些文件保留在服务器上的一个目录中,在数据库中与上传它的用户相关联,然后每个用户都可以恢复您上传的文件。

实现这个主题的最有效方法是什么?应该在每个文件名中添加什么,以便这些名称是唯一的并且在复制到服务器上的目标目录时没有问题?


不负相思意
浏览 102回答 2
2回答

jeck猫

您可以在文件名之前使用时间戳、下划线、用户 ID,例如$filename=time()."_".$UserId.$yourFileName您可以将会话中的用户 ID 和 $_FILES 中的文件名然后每个文件都有唯一的名称。

翻翻过去那场雪

在这种情况下,策略会很简单。您可以在将文件上传到存储之前覆盖文件名,并将真实名称和生成的名称存储在数据库中,用户主键在表中。之后,您可以简单地在 HTML5 下载属性中给他们一个带有原始文件名的链接。看看伪代码。<?php$original_filename = $_FILES['file']['name'];$filename = time() . '_' . $filename;if(move_uploaded_file($_FILES["file"]["tmp_name"], $filename)){&nbsp; &nbsp; $sql = "INSERT INTO media(user_id, file_name, original_name) VALUES ( $userId, $filename, $original_filename);&nbsp; &nbsp; 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 setmysqli_free_result($result);mysqli_close($con);?><a href="<?= $row['filename'] ?>" download="<?= $row['original_filename']; ?>"><?= $row['original_filename']; ?></a>
打开App,查看更多内容
随时随地看视频慕课网APP