【问题标题】:How can I add file locations to a database after they are uploaded using a Perl CGI script?使用 Perl CGI 脚本上传文件位置后,如何将文件位置添加到数据库?
【发布时间】:2023-03-09 15:20:01
【问题描述】:

我有一个使用 Perl 编写的 CGI 程序。它的功能之一是将图片上传到服务器。

所有这些都运行良好,包括将各种信息添加到 MySQL 数据库。我的问题是:如何将上传的图片文件位置和名称添加到数据库中?

我宁愿这样,而不是更改脚本以实际将图片上传到数据库。我听说过将二进制文件上传到数据库的恐怖故事。

因为我对这一切都不熟悉,所以我很茫然。已经尝试了 3 周的一些研究和网络搜索,但没有运气。任何建议或答案将不胜感激。我真的很讨厌必须手动将所有位置/名称添加到数据库中。

我正在使用:Perl CGI 脚本、MySQL 数据库、Linux 服务器,文件正在上传到服务器。我不希望将实际文件添加到数据库中。只是他们的位置。

【问题讨论】:

  • 如果您编写了 CGI 脚本,那么您就知道该脚本如何确定将文件放在何处以及如何命名它们。是什么阻止您将该信息添加到数据库中?
  • 您是否正在研究如何组合一个表来存储这些数据?或者您是否已经有一个表,并且需要一种插入数据的方法?或者您是否正在寻找一种将文件存储在磁盘上的好方法,同时又可以从网站上获取它们?

标签: mysql perl cgi


【解决方案1】:

听起来你的方法已经完成,你上传的地方,把它变成一个字符串,然后把它扔到 mysql,类似于以字符串形式读取文件。但是,由于您给定了文件句柄与 CGI 读取的文件名。您想知道该文件实际上在哪里。

如果您使用CGI.pm,upload、uploadInfo、上传参数和上传私有文件将帮助您处理上传文件的来源。在远程客户端和 CGI​​ 完成后它们被隐藏的位置通常不是永久性的,并且最小值是不稳定的。

【讨论】:

    【解决方案2】:

    您有一堆需要添加到数据库的上传文件?使用一次性脚本循环遍历所有文件并将详细信息插入数据库应该是微不足道的。如果它们都在一个地方,那么一个简单的 opendir()/readdir() 类型的循环会捕获它们,否则你可以创建一个文件路径列表来循环并循环它。

    如果您谈论的是在服务器中记录新的上传内容,那么应该是这样的:

    1. 用户上传文件到服务器
    2. 脚本从文件中提取任何想要/需要的信息(名称、大小、mime 类型、校验和等...)
    3. 启动数据库事务
    4. 将文件信息插入数据库
    5. 检索新记录的 ID
    6. 将上传的文件移动到最终存放位置,使用 ID 作为文件名
    7. 如果一切都归档,提交事务

    使用 ID 作为文件名解决了文件名冲突和新上传覆盖之前的担忧。而且,如果您将上传的内容存储在网站的 webroot 之外的某个位置,那么对文件的唯一访问将是通过您的脚本,让您可以完全控制下载。

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 1970-01-01
      • 2012-05-31
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多