Rails 4,Paperclip 4.2.1在二进制文件上传时出错

我使用rails 4和paperclip 4.2.1进行了以下设置

class Post allowed_content_type, :message=> "Only #{allowed_content_type} is allowed" 

我在我的application.rb中有这个

 <body data-controller="" data-action="" data-no-turbolink="true">   

后控制器很简单

  def update Post.transaction do @post.attributes = (artifact_params) if @artifact.errors.blank? redirect_to(@artifact, :notice => 'Evidence item updated successfully') else render :action => 'edit' raise ActiveRecord::Rollback end 

它与所有其他文件类型完美配合。 我尝试二进制文件时出错。 这是错误:

Posts中的编码:: UndefinedConversionError #refate

app / views / layouts / application.html.erb第58行引出:

 56: <body data-controller="" data-action="" data-no-turbolink="true"> 58:  59:  60:  

在日志中它说:

 ActionView::Template::Error ("\xAD" from ASCII-8BIT to UTF-8): 55:  56: 57: <body data-controller="" data-action="" data-no-turbolink="true"> 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_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: [#, #] 

花了一整天的时间,我发现这是由回形针中的错误造成的。 如果您没有将二进制文件映射到application / octet-stream,则在尝试将params转换为视图正文中的json字符串时会产生此错误。 您必须将任何二进制文件类型映射到application / octet-stream才能消除此错误。

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

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

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