php - 在用户之间共享文件
问题描述
我创建了一个基于 PHP MySQL 的应用程序,并且正在使用 XAMP 服务器。目前,我已经为用户创建了注册和登录功能,用户可以上传和下载自己的文件。所有文件都存储在 uploads/ 文件夹中。我已使用用户 ID 将这些文件存储在另一个表中。所以一个表用于存储用户的详细信息,另一个表用于根据用户的 id 存储用户的文件。现在,我想创建允许用户将文件共享给另一个用户的功能。
当我获取用户上传的所有文件时,我试图在文件旁边显示一个按钮,上面写着“共享”,该按钮发送用户文件名,但我不确定如何传递我想要的其他用户的 id共享文件并通过该文件,我如何将文件共享给选定的用户。下面是显示登录用户文件的代码和可以实现共享的链接。
while ($row = mysqli_fetch_array($result)){
$filename = $row['file'];
$filetype = $row['type'];
$filesize = $row['size'];
echo "
<tr>
<td>$filename</td>
<td>$filetype</td>
<td>$filesize KB</td>
<td><a href='uploads/$filename' target='_blank'> Download file </br></td>
<td><a href='delete.php?del=$filename' class='link'>Delete</td>
<td> <a href='shareFile.php?share=$filename' class='shareFile'>Share File </td>
</tr>";
}
}
else {
echo "<p>NO FILES UPLOADED YET</p>";
}
下表为用户:
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
用户上传的文件根据用户的id存放在user_files中。下面是 user_files 表的表:
CREATE TABLE `user_files` (
`id` int(11) NOT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`file` longtext NOT NULL,
`uploaded_on` datetime NOT NULL,
`type` varchar(30) NOT NULL,
`size` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
解决方案
首先,我没有在 user_files 表中看到用户拥有该文件的参考。
添加该列后,我建议创建一个新表,谁将拥有与谁共享 fileId 的信息。完整的数据库应如下所示:
用户:
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
用户文件:
CREATE TABLE `user_files` (
`id` int(11) NOT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`file` longtext NOT NULL,
`uploaded_on` datetime NOT NULL,
`type` varchar(30) NOT NULL,
`size` int(11) NOT NULL.
`user_id` int(11) NOT NULL REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
跟...一起分享:
CREATE TABLE `shared_files` (
`id` int(11) NOT NULL,
`file_id` int(11) NOT_NULL REFERENCES user_files(id) ON DELETE CASCADE
`with_user_id` int(11) NOT NULL REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
希望能帮助到你 :)
推荐阅读
- python - 在 Python 中使用布尔函数条件简化 if-else 语句
- windows - 在 Windows 上使用 freeze_support() 进行 Python 多处理
- c - stm32F101 USART接收中断无效状态
- c++ - (C++) std::ios::fail vs std::cin.failbit
- kotlin - 为什么 2 kotlin 降序 IntRanges 相等?
- product - 谷歌搜索控制台;产品未全部编入索引
- python-3.x - 使用 Python、Lambda 删除旧的 EBS 卷快照,除了少数带有某些标签的快照
- python - 批量插入得到弱引用的对象不再存在
- android - 在 Android 11 上访问 SQLite 数据库
- json - 为什么在使用 Spring Boot REST 后端时,TypeScript 未将 JSON 响应数据设置为某些字段的模型