Rails 3 carrierwave-azure Azure :: Core :: Http :: HTTPError OutOfRangeInput(400):其中一个请求输入超出范围

时间:2014-05-14 20:24:48

标签: ruby-on-rails azure file-upload carrierwave

我正在尝试使用carrierwave和carrierwave-azure宝石将我应用中的上传文件保存到azure存储blob中。对于wavewave-azure gem的文档在github上看起来有点精简,但我相信已经正确地遵循了所有设置方向(https://github.com/unosk/carrierwave-azure)。但它仍然无效。

当我尝试上传文件时,出现以下错误:

  

DownstreamsController中的Azure :: Core :: Http :: HTTPError #create   OutOfRangeInput(400):其中一个请求输入超出范围。

我的carrierwave.rb看起来像这样:

CarrierWave.configure do |config|
  config.azure_credentials = {
    storage_account_name: 'myaccountname',
    storage_access_key:   'reallylongstringwithcapandlowercaselettersand+signs=='
  }
  config.azure_container = 'http://myapp.blob.core.windows.net/shipmentdocs'

end

我的上传者:

 include CarrierWave::RMagick
 storage :azure

def store_dir
   "http://myapp.blob.core.windows.net/shipmentdocs/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

 version :thumb do
     process :convert => 'jpg'  
     process :resize_to_limit => [100, 100]
   end

 def extension_white_list
     %w(jpg jpeg gif png pdf doc)
   end

我在我的宝石文件中包含了这两个宝石。如果我将存储从:azure切换到:file,则上传可以存储在app目录中,我希望将该文件存储为Azure中的blob。

不确定这是否重要,但我试图通过localhost从我的本地开发环境中执行此操作。任何帮助将不胜感激。

更新: 以下是提交的请求参数:

> {"utf8"=>"✓", 
> "authenticity_token"=>"X/Q1ADOLgdaLJVsdrerdHdK9S/kJtSfjkjiutEuYsTYRY=",
> "downstream"=>{"bols_attributes"=>{"0"=>{"file_name"=>#<ActionDispatch::Http::UploadedFile:0x00000107c58340
> @original_filename="test-azure-storage-bol-file.png", 
> @content_type="image/png",  @headers="Content-Disposition: form-data;
> name=\"downstream[bols_attributes][0][file_name]\";
> filename=\"test-azure-storage-bol-file.png\"\r\nContent-Type:
> image/png\r\n", 
> @tempfile=#<Tempfile:/var/folders/dc/y286vygx1jq5wjw3f6b6bcww0000gn/T/RackMultipart20140514-8268-ngdw0m>>}},
> "sales_order"=>"RTEWW423",  "to_company_id"=>"2", 
> "ship_date"=>"2014-05-14",  "ship_total_pallets"=>"1", 
> "downstreamDetails_attributes"=>{"0"=>{"tb_product_type_id"=>"17", 
> "ship_total_net_weight"=>"3000",  "ship_total_gross_weight"=>"3000", 
> "_destroy"=>"false"}}},  "commit"=>"Submit"}

1 个答案:

答案 0 :(得分:0)

答案结果是在我的carrierwave.rb文件中,我使用了config.azure_container设置的完整网址(即&#39; http://myapp.blob.core.windows.net/shipmentdocs&#39;)。事实证明,您应该提供容器名称,如下所示:

config.azure_container = 'shipmentdocs'

注意进行此更改需要重新启动服务器才能使其生效,因为carrierwave.rb文件应位于config / initializers文件夹中。