【问题标题】:Rails 3 carrierwave-azure Azure::Core::Http::HTTPError OutOfRangeInput (400): One of the request inputs is out of rangeRails 3 carrierwave-azure Azure::Core::Http::HTTPError OutOfRangeInput (400):请求输入之一超出范围
【发布时间】:2014-05-14 20:24:48
【问题描述】:

我正在尝试使用carrierwave 和carrierwave-azure gem 将我的应用中上传的文件保存到天蓝色存储blob。 carrierwave-azure gem 的文档在 github 上似乎有点精简,但我相信正确地遵循了所有设置方向 (https://github.com/unosk/carrierwave-azure)。但是它仍然不起作用。

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

DownstreamsController#create 中的 Azure::Core::Http::HTTPError 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

我已经在我的 gem 文件中包含了这两个 gem。如果我将存储从 :azure 切换到 :file 上传工作,但是它存储在应用程序目录中,我想将文件作为 blob 存储在 Azure 中。

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

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

> {"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"}

【问题讨论】:

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


    【解决方案1】:

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

    config.azure_container = 'shipmentdocs'
    

    还需要注意的是,进行此更改需要重新启动服务器才能生效,因为carrierwave.rb 文件应该在您的config/initializers 文件夹中。

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2014-12-17
      • 1970-01-01
      • 2012-08-02
      • 2015-07-24
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2022-07-28
      相关资源
      最近更新 更多