Ruby on rails Rails 4,回形针4.2.1给出二进制文件上传错误

Ruby on rails Rails 4,回形针4.2.1给出二进制文件上传错误,ruby-on-rails,paperclip,paperclip-validation,Ruby On Rails,Paperclip,Paperclip Validation,我对rails 4和曲别针4.2.1进行了以下设置 class Post< ActiveRecord::Base has_attached_file :key allowed_content_type = ['text/plain', 'text/rtf', 'text/richtext', 'application/txt', 'application/octet-stream'] validates_attachment_content_type :key, :conte

我对rails 4和曲别针4.2.1进行了以下设置

class Post< ActiveRecord::Base
  has_attached_file :key
  allowed_content_type = ['text/plain',
'text/rtf', 
'text/richtext',
'application/txt',
'application/octet-stream']
  validates_attachment_content_type :key, :content_type => allowed_content_type, :message=> "Only #{allowed_content_type} is allowed"
它可以完美地处理所有其他文件类型。尝试二进制文件时出错。 这就是错误:

编码::文章中未定义的转换器错误#更新

app/views/layouts/application.html.erb,其中第58行出现:

56: <body data-controller="<%= controller.controller_path %>" data-action="<%= 
57: controller.action_name %>" data-no-turbolink="true">
58: <%= content_tag "div", id: "params" , data: { params: params } do %>
59: <%#= params.inspect %>
60: <% end %> 
56:
58: 
59: 
60:  
日志上写着:

ActionView::Template::Error ("\xAD" from ASCII-8BIT to UTF-8):
    55: </head>
    56: 
    57: <body data-controller="<%= controller.controller_path %>" data-action="<%= controller.action_name %>" data-no-turbolink="true">
    58:   <%= content_tag "div", id: "params" , data: { params: params } do %>
    59:     <%#= params.inspect %>
    60:   <% end %>
    61:   
  app/views/layouts/application.html.erb:58:in `_app_views_layouts_application_html_erb__387563064_102572910'
  app/controllers/posts_controller.rb:978:in `block in update'
  app/controllers/posts_controller.rb:790:in `update'
 Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (15.0ms)
  Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (7.1ms)
  Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.9ms)
  Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (47.8ms)
Cannot render console with content type multipart/form-dataAllowed content types: [#<Mime::Type:0xa835748 @synonyms=["application/xhtml+xml"], @symbol=:html, @string="text/html">, #<Mime::Type:0xa835608 @synonyms=[], @symbol=:text, @string="text/plain">]
ActionView::Template::Error(“\xAD”从ASCII-8BIT到UTF-8):
55: 
56: 
57: 
58:   
59:     
60:   
61:   
app/views/layouts/application.html.erb:58:in`_app_views_layouts_application_html_erb_387563064_102572910'
app/controllers/posts_controller.rb:978:in'block in update'
app/controllers/posts_controller.rb:790:in'update'
Rendered/home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action\u dispatch/middleware/templates/rescues//u source.erb(15.0ms)
Rendered/home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action\u dispatch/middleware/templates/rescues//u trace.html.erb(7.1ms)
Rendered/home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action\u dispatch/middleware/templates/rescues//u request\u and\u response.html.erb(1.9ms)
rescues/layout中的Rendered/home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action\u dispatch/middleware/templates/rescues/template\u error.html.erb(47.8ms)
无法呈现内容类型为multipart/form data的控制台允许的内容类型:[#,#]

在花了一整天的时间之后,我发现这是由回形针中的一个错误引起的。如果您没有将二进制文件映射到application/octet流,则在试图将参数转换为视图主体中的json字符串时,会产生此错误。您必须将任何二进制文件类型映射到application/octet流才能消除此错误

1.因此,在config/initializers中创建paperclip.rb/ 2.在config/initializers/paperclip.rb中放置以下代码:

Paperclip.options[:content_type_mappings] = {
  tc: 'application/octet-stream'
}

其中tc是二进制文件的扩展名。我不知道这将如何工作,如果你有一个没有扩展名的文件。回形针所有者应该清楚地记录这一点,以避免用户的痛苦。

在firefox上上载zip文件也会失败,但在其他浏览器上,可能会出现同样的问题
ActionView::Template::Error ("\xAD" from ASCII-8BIT to UTF-8):
    55: </head>
    56: 
    57: <body data-controller="<%= controller.controller_path %>" data-action="<%= controller.action_name %>" data-no-turbolink="true">
    58:   <%= content_tag "div", id: "params" , data: { params: params } do %>
    59:     <%#= params.inspect %>
    60:   <% end %>
    61:   
  app/views/layouts/application.html.erb:58:in `_app_views_layouts_application_html_erb__387563064_102572910'
  app/controllers/posts_controller.rb:978:in `block in update'
  app/controllers/posts_controller.rb:790:in `update'
 Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (15.0ms)
  Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (7.1ms)
  Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.9ms)
  Rendered /home/adminuser/.rvm/gems/ruby-2.1.1/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (47.8ms)
Cannot render console with content type multipart/form-dataAllowed content types: [#<Mime::Type:0xa835748 @synonyms=["application/xhtml+xml"], @symbol=:html, @string="text/html">, #<Mime::Type:0xa835608 @synonyms=[], @symbol=:text, @string="text/plain">]
Paperclip.options[:content_type_mappings] = {
  tc: 'application/octet-stream'
}