Ruby on rails Rails强参数Rack::Multipart::UploadedFile的未授权参数

Ruby on rails Rails强参数Rack::Multipart::UploadedFile的未授权参数,ruby-on-rails,strong-parameters,grape,Ruby On Rails,Strong Parameters,Grape,我正试图在我的API端点上发送一个文件。我正在使用强参数验证输入,因此: def postParams ActionController::Parameters.new(params).permit(:foo, :bar, :cv_file) end params do requires :foo, allow_blank: false, type: String requires :bar, allow_blank: false, type: String requires

我正试图在我的API端点上发送一个文件。我正在使用强参数验证输入,因此:

def postParams
  ActionController::Parameters.new(params).permit(:foo, :bar, :cv_file)
end

params do
  requires :foo, allow_blank: false, type: String
  requires :bar, allow_blank: false, type: String
  requires :cv_file, :type => Rack::Multipart::UploadedFile
end
结果是
未允许的参数:cv_file

如果我将
cv_文件
的类型更改为字符串,则可以使用,但
Rack::Multipart::UploadedFile的类型不接受

我错过什么了吗?也许是头球

更新

正如我看到的,我的邮递员有一些问题,所以我现在用curl打电话,回到“unpermittedparameter:cv_file”

我发现出现此问题是因为文件如下所示:

<Hashie::Mash filename="CV 2017 June.pdf" head="Content-Disposition: form-data; name=\"cv_file\"; filename=\"CV 2017 June.pdf\"\r\nContent-Type: application/octet-stream\r\n" name="cv_file" tempfile=#<Tempfile:/tmp/RackMultipart20170614-11-1vhzirn.pd‌​f> type="application/octet-stream"> 

是的,您需要内容类型的
multipart/form data
标题。你是怎么发送的?嗨@Iceman,我试过了,但是我得到了
Rack::QueryParser::InvalidParameterError(无效的%-编码(“foo”)….
但我看到了那里的文件。我和邮递员一起发送,也许这是相关的。卷曲度似乎不同,我没有得到
Rack::QueryParser::InvalidParameterError
,但我回到了
Unpermitted parameter:cv_file
。唯一的办法是不使用
postParams
方法,我有这个文件。
。我找不到使用强参数的方法。您应该使用此信息来回答问题,以增加回答的机会,我恐怕这不是我在Rails方面的强项。
  def postParams

    local_param = params.dup

    upload = ActionDispatch::Http::UploadedFile.new(
        tempfile: params[:csv][:tempfile],
        filename: params[:csv][:filename],
        type:     params[:csv][:type],
        headers:  params[:csv][:head],
      )

    local_param[:csv] = upload

    ActionController::Parameters.new(local_param).permit(:foo, :bar, :cv_file)
  end

  desc "Create new candidate"
  params do
    requires :foo, allow_blank: false, type: String
    requires :bar, allow_blank: false, type: String
    optional :cv_file,:type => File
  end
  post 'new' do

    post_params = postParams

    if(post_params[:candidate_cv])

      # Process the CV file
      post_params.delete :candidate_cv
    end

    Candidate.create!(post_params)
  end