在使用Perl CGI脚本上载文件位置后,如何将文件位置添加到数据库?

时间:2010-03-29 15:18:00

标签: mysql perl cgi

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

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

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

由于我是所有这一切的新手,我不知所措。已经尝试过3周的研究和网络搜索,但没有运气。任何建议或答案将不胜感激。我真的很讨厌必须手动将所有位置/名称添加到数据库中。

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

2 个答案:

答案 0 :(得分:1)

听起来你的方法已经完成了你上传的地方,把它变成了一个字符串并把它扔到mysql上,类似于以字符串形式读取文件。但是,因为你给出了一个文件句柄而不是CGI读取的文件名。你想知道那个文件到底在哪里。

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

答案 1 :(得分:0)

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

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

  1. 用户将文件上传到服务器
  2. 脚本从文件中提取任何想要/需要的信息(名称,大小,mime类型,校验和等...)
  3. 启动数据库事务
  4. 将文件信息插入数据库
  5. 检索新记录的ID
  6. 使用ID作为文件名
  7. 将上传的文件移至最终的休息位置
  8. 如果一切都归档,请提交交易
  9. 使用ID作为文件名解决了文件名冲突和新上传覆盖以前的问题的担忧。如果您将上传内容存储在网站的webroot之外的某个位置,则只能通过您的脚本访问这些文件,从而完全控制下载。