您可能想知道为什么要将文件“放入”数据库,而不是仅仅放在文件系统上。那么大多数时候,你不会。
在您的PHP应用程序需要存储整个文件的情况下,首选方法是将文件保存到服务器的文件系统中,并将文件的物理位置存储在数据库中。这通常被认为是存储文件的最简单和最快捷的方式。
但是,您可能会发现自己处于需要将文件与数据库中其他数据保持一致的情况。这给你 – 或者说:MySQL – 完全控制文件数据,而不仅仅是文件在服务器上的位置。
这种方法有一些缺点,如:降低了性能,增加了PHP代码和数据库结构的复杂性。这是您在实际应用中使用之前应仔细考虑的内容。
话虽如此,本文演示了如何将文件从浏览器上传到 MySQL ,以及如何将文件发送回浏览器。
开始之前
要顺利完成,您应该熟悉以下内容:
-
PHP基础知识
-
MySQL基础知识
-
在PHP中使用My sql (mysqli)
-
HTML表单以及如何在PHP中处理POST数据。
战斗计划
与所有计划一样,在我们开始撰写之前,我们需要稍微计划一点。所以我们知道我们在写作之前要写什么。
在开始该程序之前,我们需要设计数据库。这不是一个复杂的设计,因为我们不是在说创建一些复杂的文件系统。我们只需要一个单独的表格,其中包含一个用于我们文件的BLOB字段和各种其他字段来存储我们文件中的信息,如名称,大小,类型。
接着。该程序的第一阶段是将文件从我们的用户获取到我们的PHP可以与它进行交互的服务器上。这是该过程中最简单的部分,只需要一个基本的HTML表单。
第二阶段涉及阅读上传的文件,确保已成功上传并将其添加到数据库。这与上传文件到文件系统时使用的过程类似,但使用MySQL函数而不是文件系统函数。
第三阶段是列出已经上传并保存在数据库中的所有文件,并附上一个链接,以便下载。这里唯一的问题是文件不存在于服务器上,所以我们如何创建一个链接呢?这是第4阶段处理的一个问题,我们在阶段3中需要做的是创建一个链接,该链接将嵌入到URL中的文件的ID。
第四个也是最后一部分是对这个过程最令人困惑的部分。我们获取文件并将其发送到客户端浏览器的部分。
我们从使用MySQL函数和第3阶段发送的ID开始,从数据库中获取文件数据。然后我们设置几个标题,让浏览器知道预期的内容,最后发送文件的内容。
现在,以此摘要为指导,让我们开始编写我们的程序。
阶段0:构建数据库
数据库很简单。一个具有文件数据的BLOB字段的表和与文件相关的各种信息的几个字段:
如您所见,我们存储文件名,包括扩展名。
我们有mime类型,我们使用它来让浏览器知道我们正在处理什么样的文件。
文件的大小(以字节为单位)。
最后数据本身在一个MediumBlob字段中。
阶段1:上传文件
现在,我们需要从用户那里获取文件。我们设计的表不需要用户的任何其他信息,因此我们将简单地创建一个HTML表单,只有一个“文件”输入字段和提交按钮:
<!DOCTYPE html>
MySQL文件上传示例 title>
HEAD>
FORM>
p>
BODY>
HTML>
注意