使用Catalyst使用DBIC将文件存储在数据库中

时间:2017-06-07 18:29:03

标签: mysql perl file upload catalyst

我使用Perl Catalyst框架构建一个需要在MySQL数据库中存储多个文件的应用程序(以及其他内容)。我想存储文件的名称,路径,扩展名等,以便以后检索它们;因为应该可以从应用程序访问它们(例如:为某人上传的PDF文档,以后必须可供下载)。我可以这样做吗?我在PHP中找到了几种方法,但perl没有。有什么想法吗?

修改

我知道我可以使用Catalyst :: Request :: Upload访问一些信息。我过去用它来进行BLOB存储,但我不知道如何获取文件信息,也不知道如何知道催化剂存储tmp文件的位置。

所以,基本上,尝试这个时出现的问题是:

  1. 如果我提交文件后如何知道我的文件存储在哪里?
  2. 如何将这些文件(我假设转到某处的tmp文件夹)复制到我的计算机/服务器中的文件夹中?
  3. 如果存储这些文件后如何检索这些文件?
  4. 编辑2

    我再次检查了Catalyst :: Request :: Upload(http://search.cpan.org/~jjnapiork/Catalyst-Runtime-5.90114/lib/Catalyst/Request/Upload.pm)的文档,并了解了如何知道我的文件存储在哪里如何将它们复制到新的非tmp位置。唯一的问题仍然存在:

    如何为这些文件生成下载链接?

1 个答案:

答案 0 :(得分:1)

解决方案非常简单。

  • 首先确保在Catalyst应用文件中配置了'tmp'文件夹(例如:MyApp.pm)。
  • 现在,使用Catalyst :: Request :: Upload创建包含上传文件的文件对象。排序......

     my $upload = $req->upload('input_field_name');
    
  • 现在确保从文件中获取要存储的所有数据。我个人而言,只获得了文件名,MIME类型和大小。

    my $filename = $upload->filename;
    my $size = $upload->size;
    my $type = $upload->type;
    
  • 存储到数据库中。

  • 现在,在页面的公共内容中创建一个文件夹以将文件复制到,并执行以下复制:

    $upload->copy_to('path/to/the/public/folder');
    
  • 要检索文件,只需创建一个链接,其中包含公用文件夹的基本URL和存储在数据库中的文件名。

希望它对某人有所帮助......但这很明显;但它让我的脑袋有点崩溃了。