我正在尝试使用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"}
答案 0 :(得分:0)
答案结果是在我的carrierwave.rb文件中,我使用了config.azure_container设置的完整网址(即&#39; http://myapp.blob.core.windows.net/shipmentdocs&#39;)。事实证明,您应该提供容器名称,如下所示:
config.azure_container = 'shipmentdocs'
注意进行此更改需要重新启动服务器才能使其生效,因为carrierwave.rb文件应位于config / initializers文件夹中。