составные рельсы Fineuploader

Я пытаюсь заставить многокомпонентную загрузку работать с рельсами в качестве сервера для подписи запросов. Ниже приведен фрагмент кода. signal.endpoint — это действие создания.

require 'base64'
require 'openssl'
require 'digest/sha1'
class WelcomeController < ApplicationController
  skip_before_action :verify_authenticity_token
  def success
    render json: params
  end
  def index
  end
  def create
    if(params[:headers])
      signature = OpenSSL::HMAC.digest(
      OpenSSL::Digest::Digest.new('sha1'),
      key,
        params[:headers].to_s).gsub("\n", "")
       params[:signature]= signature
    else
     conditions =  params[:conditions]
     conds =  [
       {"acl" => "private"},
       {"bucket" => conditions[1][:bucket]},
       {"Content-Type" => conditions[2]["Content-Type"]},
       {"success_action_status" => "200"},
       {"key" => conditions[4][:key]},
       {"x-amz-meta-qqfilename" => conditions[5]["x-amz-meta-qqfilename"]}
       ]
       policy = Base64.encode64({  "expiration" => params[:expiration],
                                  "conditions" => conds
                                }.to_json).
                      gsub("\n","")

       signature = Base64.encode64(
       OpenSSL::HMAC.digest(
        OpenSSL::Digest::Digest.new('sha1'),
         key, policy)
        ).gsub("\n","")
    params[:signature]= signature
    params[:policy] = policy
  end
   render :json => params, :status => 200 and return
 end
end

Это отлично работает для файлов размером ‹ 5 МБ, т.е. else часть блока if-else. Но запрос не подписывается должным образом, когда размер файла> 5 МБ.

Пожалуйста, предложите, что мне здесь не хватает.


person user2307034    schedule 21.04.2015    source источник


Ответы (1)


Солн:

require 'base64'
require 'openssl'
require 'digest/sha1'
class WelcomeController < ApplicationController
  skip_before_action :verify_authenticity_token
  def success
   render json: params
  end
  def index


  end
  def create
   if(params[:headers])
         logger.info params[:welcome][:headers]
          signature = Base64.encode64(OpenSSL::HMAC.digest(
          OpenSSL::Digest::Digest.new('sha1'),
          key,
            params[:welcome][:headers])).gsub("\n", "")
           params[:signature]= signature
   else
    conditions =  params[:conditions]
    conds =  [
      {"acl" => "public-read"},
      {"bucket" => conditions[1][:bucket]},
      {"Content-Type" => conditions[2]["Content-Type"]},
      {"success_action_status" => "200"},
      {"key" => conditions[4][:key]},
      {"x-amz-meta-qqfilename" => conditions[5]["x-amz-meta-qqfilename"]}
    ]
    policy = Base64.encode64({  "expiration" => params[:expiration],
                                      "conditions" => conds
                                    }.to_json).
                          gsub("\n","")
    signature = Base64.encode64(
    OpenSSL::HMAC.digest(
        OpenSSL::Digest::Digest.new('sha1'),
        key, policy)
    ).gsub("\n","")
     params[:signature]= signature
     params[:policy] = policy
     end
      logger.info signature
      render :json => params, :status => 200 and return
  end
end
person user2307034    schedule 24.04.2015