上传文件并将文件名保存在 MySQL 数据库中

Posted

技术标签:

【中文标题】上传文件并将文件名保存在 MySQL 数据库中【英文标题】:Uploading a file and saving filename in MySQL database 【发布时间】:2017-07-12 08:13:07 【问题描述】:

我目前正在通过网络浏览器将一组文件上传到 php 脚本。然后 PHP 脚本会将文件保存到本地目录并使用 PDO 将文件名存储在数据库中。我能够成功地做到这两点。但是,我担心其中一个过程失败而另一个成功的可能性。

取决于我先做这两个操作中的哪一个,我最终会陷入糟糕的境地:

方法一:

我首先创建数据库条目。这是成功的。然后我继续尝试保存文件,但文件无法保存。在这种情况下,我最终会得到一个断开的链接。

建议的解决方案:在保存失败时,我发出第二个命令来删除数据库条目并希望它有效。

方法二:

我首先保存文件。这是成功的。然后我继续尝试为其创建一个数据库条目,但该条目失败。在这种情况下,我的系统上会出现数据库一无所知的孤立文件。

建议的解决方案:在写入数据库失败时,我发出一个命令来取消链接文件并希望它有效。

我在这些选项中的任何一个都走在正确的轨道上吗?这两种方法中的一种会比另一种更不容易出错或更有效吗?还有其他我没有想到的方法吗?

【问题讨论】:

【参考方案1】:

出于好奇,为什么会失败?

但是,第二种方法更安全:取消链接您已经知道的文件比向数据库请求删除文件名要简单和快捷。 所以场景会像这样(在伪 PHP 中)

$file = 'path/to/file.pdf';
$destination = '/path/to/upload/dir';

if(move_uploaded_file($file, $destination) 
    echo 'Success';
 
else 
    unlink($file);

如您所见,这很简单,希望对您有所帮助

【讨论】:

除了我应该检查数据库条目是否成功,而不是文件是否保存。 再说一次,为什么会失败?如果您仍处于开发模式,请注释上传文件的部分,并尝试使用一些固定值,以确保您的服务器不会丢失文件 永远不要认为事情总会成功。例如,如果数据库服务器已经崩溃或损坏,那将是失败的根源。 然后,在数据库中将字段设置为“必填”。这样保存失败就会报错 如果你担心它会失败,为什么不开发单元测试呢?

以上是关于上传文件并将文件名保存在 MySQL 数据库中的主要内容,如果未能解决你的问题,请参考以下文章

PHP和Ajax将文件路径上传到Mysql并将重命名的图像保存到文件夹失败

如何使用 PHP 以动态形式上传文件并将路径/文件名与其他数据一起保存到 mysql

CakePHP 3:上传多个文件并将文件名保存在关联模型中?

DreamFactory:如何将图像上传到文件服务器并将图像的路径保存在数据库中?

如何上传图像并将其保存在数据库中? [复制]

在 PHP 中创建文件并将其上传到 FTP 服务器而不在本地保存