gpt4 book ai didi

ruby-on-rails - 回形针上传yml文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:36 25 4
gpt4 key购买 nike

我在通过回形针上传 yml 文件时遇到问题。这是我尝试这样做的方式:

在我的模型中我有:

has_attached_file :search_config
validates_attachment_content_type :search_config, content_type: ['text/yaml', 'application/x-yaml', 'text/x-yaml', 'application/yaml', 'text/plain']

在我看来:

<%= form_for @search, :html => { :multipart => true } do |f| %> 

<fieldset>
<legend>Skills</legend>
<%= hidden_field_tag :type, 'recommendation' %>
<%= f.file_field :search_config %>
<%= f.submit 'Save', class: 'btn btn-primary' %>
</fieldset>

在我的 Controller 中:

def create
@search = MailingSearch.new(params[:mailing_search])
if @search.save
redirect_to action: :index, notice: 'Your search was successfully created. Search results will be send via email soon.'
else
render action: :new
end
end

我得到一个错误,那个

search_config_content_type=>["is invalid"]

当我尝试从控制台创建文件时(我使用的是同一个文件):

ms = MailingSearch.new
ms.search_config = File.open('tmp/test.yml')
ms.save

它有效。这里可能有什么问题?

最佳答案

使用调试器检查 Controller 中的 params[:mailing_search]

我怀疑 params[:mailing_search][:search_config].content_type 将是 application/octet-stream 因为 .yml 文件被视为二进制文件。

由于您不允许 application/octet-stream 作为有效的内容类型,这就是您收到错误的原因。

当您尝试通过控制台时,内容类型不会被浏览器覆盖,这就是它起作用的原因。

在您的 Controller 中,在构建@search 之前,您可以使用以下方法将参数中的内容类型重置为文件的 MIME 类型:

params[:mailing_search][:search_config].content_type = MIME::Types.type_for(params[:mailing_search][:search_config].original_filename).first.content_type

这应该保留 text/x-yaml 作为您允许有效的文件的内容类型。

关于ruby-on-rails - 回形针上传yml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com