Ruby on Rails - 活动存储 - 如何只接受 pdf 和 doc

作者:编程家 分类: ruby 时间:2025-06-25

标题: Ruby on Rails 活动存储中的文件类型限制

在Ruby on Rails中,活动存储(Active Storage)是一个强大的工具,可用于处理文件上传和存储。然而,有时您可能需要限制用户上传的文件类型,以确保系统的安全性和一致性。本文将介绍如何在您的Ruby on Rails应用程序中实现文件类型的限制,以仅允许上传PDF和DOC文件。

### 步骤1: 安装和配置活动存储

首先,确保您已经在Rails应用程序中安装了Active Storage。您可以通过运行以下命令来完成安装:

ruby

rails active_storage:install

接下来,运行数据库迁移以创建所需的表格:

ruby

rails db:migrate

然后,将以下行添加到您的`config/environments/development.rb`和`config/environments/production.rb`文件中,以配置存储服务:

ruby

config.active_storage.service = :local

### 步骤2: 创建验证器

要实现文件类型的限制,您需要创建一个自定义验证器。在Rails中,您可以使用`ActiveStorage::Attached::One`或`ActiveStorage::Attached::Many`来连接附件,并使用`validate`方法来添加验证规则。

ruby

class Document < ApplicationRecord

has_one_attached :file

validate :file_type

private

def file_type

if file.attached? && !file.content_type.in?(%w(application/pdf application/msword))

errors.add(:file, '只能上传PDF和DOC文件')

end

end

end

在上面的代码中,我们创建了一个名为`Document`的模型,它有一个名为`file`的附件,我们在`file_type`验证方法中检查文件的MIME类型是否为PDF或DOC。如果文件类型不匹配,将在错误消息中添加相应的提示。

### 步骤3: 更新表单和控制器

现在,您需要在您的表单和控制器中进行一些更改,以确保文件类型限制生效。在表单中,确保您的文件字段使用`direct_upload`方法,如下所示:

ruby

<%= form.file_field :file, direct_upload: true %>

然后,在控制器中,您可以处理文件上传并检查验证器的结果:

ruby

def create

@document = Document.new(document_params)

if @document.save

# 文件上传成功

else

# 文件上传失败,处理错误

end

end

private

def document_params

params.require(:document).permit(:file)

end

###

通过按照上述步骤配置和实现文件类型的限制,您可以在Ruby on Rails应用程序中只允许用户上传PDF和DOC文件。这有助于确保您的应用程序的文件上传功能更加安全和可控。希望这篇文章对您有所帮助!