我想将图像存储在我的服务器上并用我的数据库对其进行索引,以便以后可以通过用户名或从上传图像的人那里收集的其他信息来搜索它们。我以为我会让我的程序在上传时将上传的位置保存到数据库中。我很确定这是可能的,但作为 php 的新手,我需要一个开始的地方。
2 回答
这不仅仅是关于文件的上传和将元数据存储到数据库中。确保保存您的应用程序以防被劫持。
按表格上传图片。
确保在将元数据存储到数据库时如何处理损坏的上传或上传失败。(否则使用垃圾收集之类的东西来避免磁盘空间不足或数据库条目没有相关文件。)
始终只有注册用户才能上传、使用会话 cookie
确保您的服务器只接受有效会话的有效表单数据!!!
确保您在服务器上运行了病毒扫描程序,如果可能的话,让您的脚本对其做出反应,但不要向外部显示。
改名!!!服务器上的文件,取消文件类型后缀(将此信息存储在数据库中,包括要发送的 mimetype),也许使用压缩。
永远不要让用户知道文件的存储位置!!!使用下载脚本将有关文件路径的信息隐藏到外部!
编辑:
这不是一个完整的列表,只是让您对它的外观有一个印象!
上传:
构建一个上传脚本,如......
像这样构建数据库表:
文件
uid, id, filename, real_filename, suffix, content_length, datetime_upload
扩展(可能性列表)
uid, id, suffix, mimetype
用户->文件关系
uid, id, user_id, file_id
确保从有效的用户会话调用上传脚本或退出
确保用户是否有权存储数据(角色模型)或退出
接收表单并检查表单数据是否有效(变量、验证码等)或退出
检查文件类型是否允许,可选择在最终保存之前对文件进行二进制检查(文件类型在标题中)和/或病毒检查
为文件建立一个空条目并接收file_id,否则出错
建立新的文件名,fe
$new_filename = $file_id . '-' . md5($old_filename);
将数据存储到光盘
如果存储正常,则更新数据库条目,否则删除条目并出错
为 user_id->file_id 存储一个条目
下载:
构建一个下载脚本,如...
确保从有效的用户会话中调用下载脚本或退出
确定用户是否有权下载这条数据(角色模型和用户->文件关系)或退出
获取旧文件名、大小和 mimetype 以执行一些发送操作
使用标头中存储的 mimetype 将文件发送到浏览器,以避免文件在客户端被接受并作为不同的东西 (fe .exe) 执行。添加正确的下载标头、内容长度和缓存标头。从正确的文件中添加二进制数据流。
要遵循的步骤:
您可以通过多种方式进行操作 - 使用 AJAX 上传器,或者您是否只是要在表单中选择图像并将图像与用户数据一起保存......
但是 AJAX 的简单过程是......
- 上传图片
- 返回图片名称
- 使用用户参考将图像名称保存到数据库
- 搜索 - 从数据库中搜索图像参考到图像在数据库中的存储位置
否则
- 按保存
- 上传图片到目录
- 如果传输成功,请保存文件名以及用户信息
- 通过用户引用搜索数据库并获取该用户的图像名称