【问题标题】:Rails ActiveStorage Error - MessageVerifier-InvalidSignatureRails ActiveStorage 错误 - MessageVerifier-InvalidSignature
【发布时间】:2018-11-02 04:18:23
【问题描述】:

我正在处理一个需要Location 模型上的ActiveStorage has_many_attached :photos 情况的项目。

我在下面设置了代码,但是在尝试上传表单时,我收到以下错误:

ActiveSupport::MessageVerifier::InvalidSignature in 
                                 LocationsController#attach_photo

这是将文件“添加”到特定父记录(即:Location 记录)的附件集中的方法吗?

Location模特

class Location < ApplicationRecord
  ...
  has_many_attached :photos
  ...
end

位置控制器

class LocationsController < ApplicationController
  ...
  def attach_photo
    @location = Location.find(params[:id])
    @location.photos.attach(params[:photo])
    redirect_to location_path(@location)
  end
  ...
end

查看

<%= form_tag attach_photo_location_path(@location) do %>
  <%= label_tag :photo %>
  <%= file_field_tag :photo %>

  <%= submit_tag "Upload" %>
<% end %>

查看

resources :locations do
  member do
    post :attach_photo
  end
end

【问题讨论】:

  • 我最近使用了 ActiveStorage 的直接上传功能。我喜欢这种方法的地方在于我不必编写任何代码来处理实际上传本身,Rails 为我完成了。你是否也采用了这种方法?请参阅此处的相关指南并让我知道:edgeguides.rubyonrails.org/… - 即使文档中提到了上传到云端,它也适用于本地存储的文件。

标签: ruby-on-rails ruby rails-activestorage


【解决方案1】:

确保在form_tag 中添加multipart: true。它生成enctype="multipart/form-data"

form_tag默认不负责,必须有(如果附加文件)。

multipart/form-data 没有字符被编码。此值是必需的 当您使用具有文件上传控件的表单时

表格:

<%= form_tag attach_photo_location_path(@location), method: :put, multipart: true do %>
  <%= label_tag :photo %>
  <%= file_field_tag :photo %>

  <%= submit_tag "Upload" %>
<% end %>

还有:

post 更改为put 方法,我们正在更新而不是创建Idempotency

resources :locations do
  member do
    put :attach_photo
  end
end

【讨论】:

    【解决方案2】:

    您需要将签名(在params[:signed_blob_id] 中)分配给实例,如the docs 中的示例所示。

    所以,像这样:

    @location.photos.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
    

    【讨论】:

      【解决方案3】:

      我用这个解决了这个问题

      
        def user_params
          params.permit(
            :id, :name, :email, :username, :country, :avatar, :id_number, :license_number
          ).select {|x,v| v.present?}
        end
      

      看起来空值导致问题"avatar"=&gt;""

       "id_number"=>"234545", "license_number"=>"234545", "avatar"=>""
      

      我的模型

      class User < ApplicationRecord
        has_one_attached :avatar
      

      【讨论】:

        【解决方案4】:

        启用 Network Inspect 的 Rails Active Storage + React Native + React Native 调试器可能会导致此错误。

        如果您将React Native debuggerNetwork Inspect Enabled 一起使用,则由于以下已知问题,文件上传可能无法正常工作:Formdata sends [object object] in request

        在使用 React Native 调试器时关闭 Network Inspect。您可以改为使用 Reactotron 检查网络负载。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-18
          • 2022-06-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多