Ruby on Rails 2.1 - 文件上传

您可能有一项要求,即希望网站访问者将文件上传到您的服务器。Rails 可以非常轻松地处理此要求。现在,我们将开始一个简单而小型的 Rails 项目。

像往常一样,让我们​​从一个名为 upload 的新 Rails 应用程序开始。让我们使用简单的 rails 命令创建应用程序的基本结构。

C:
uby> rails -d mysql upload
上传文件

现在,选择一个文件并上传。此文件将以实际文件名上传到 app/public/data 目录中,并显示一条消息,提示"文件已成功上传"。

注意 −如果输出目录中已经存在同名文件,则会覆盖该文件。

从 Internet Explorer 上传的文件

Internet Explorer 在发送的文件名中包含文件的完整路径,因此 original_filename 例程将返回类似的内容 −

C:\Documents and Files\user_name\Pictures\My File.jpg

而不仅仅是 −

My File.jpg

这可以通过 File.basename 轻松处理,它会删除文件名之前的所有内容。

def sanitize_filename(file_name)
    # 仅获取文件名,而不是完整路径(来自 IE)
    just_filename = File.basename(file_name)
    # 替换所有非字母数字、下划线或句号
    # 带下划线
    just_filename.sub(/[^\w\.\-]/,'_')
end

删除现有文件

如果您想删除任何现有文件,这非常简单。您需要做的就是编写以下代码 −

def cleanup
    File.delete("#{RAILS_ROOT}/dirname/#{@filename}")
    if File.exist?("#{RAILS_ROOT}/dirname/#{@filename}")
end

有关 File 对象的完整详细信息,您需要阅读我们的 Ruby 参考手册