在数据库中存储上载文件的路径

时间:2012-02-27 11:21:02

标签: ruby-on-rails ruby database file-upload

我一直在努力做简单的文件上传,但是我无法找到一个可以做到这一点的宝石,它们似乎只是朝向 图片。我只想要基本的.zip文件上传。有人可以指导我做一个这样做的宝石或一个构建自己的自定义的教程 上传。但是,如果没有,我将创建自己的文件上传,但后来我面临以下问题

问题:

当用户点击上传按钮时,如何将文件的路径存储在数据库中?

以下是方案:

表单由以下内容组成:

Title box:
File select box:
Upload button:

数据库表只包含两列,文件系统上的title (Title)file's path (FilePath)

用户填写标题,浏览系统中的文件,然后点击上传按钮,然后需要文件 要存储在磁盘上,让我们说/public/uploads/file1.zip同时也写入mysql数据库上传的标题以及 现在位于/public/uploads/file1.zip.

的实际文件的路径

在另一个页面上,我只需查询数据库即可检索Title和FilePath,它将显示标题和文件的链接/路径,用户只需单击并下载即可。

它将在页面上显示如下:

标题 - 下载

所以即27日的会议文件 - 下载

其中“标题”=用户提交的文件标题和“下载”=您可以单击的实际链接将从磁盘检索文件 并开始下载。这需要是来自数据库的一个查询,该查询检索标题和文件的路径。查询 部分我知道该怎么做。它只是将文件上传到该目录的一部分,将该特定文件的目录存储在数据库中,并且是用户提交的标题。

我们将非常感谢任何建议,示例和资源。谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

uploading files阅读rails guides,然后阅读CarrierWave README。基本上是:

# in the model
mount_uploader :archive, ArchiveUploader, mount_on: :archive_path

# in the controller action
@record = YourModel.new(params[:record]) # moves the file from server upload path to CW cache dir
@record.save # moves the file from CW cache dir to final fs dir, and stores path in mounted_on column

# in the form
<%= f.file_field :archive %>

# in the view
<%= link_to 'Download', @record.archive_url %>

文件系统路径将存储在您安装的表列中。

答案 1 :(得分:0)

正如@clyfe所提到的,carrierwave是上传文件的方式,因为您希望carrierwave将文件存储在磁盘中并将路径存储在数据库中。

其自述文件本身具有设置它的大部分细节

一旦你将它设置得非常简单,最重要的是它适用于rails 2.x和3.x.

以下是一个不错的screen cast you may want to check

HTH