我正在使用帶有霧存儲的carrierwave的導軌應用程序。我的表單中有幾個字段,用戶可以在其中提交一個應用程序(名稱,簡稱&長描述,圖像字段)。上傳文件的名稱是從我的表單的「名稱」字段中的字段名稱獲取的。使用「+」號讀取S3存儲桶文件時,亞馬遜S3訪問被拒絕
例如,當我上傳名爲Notepad
的文件時,一切正常,圖像顯示在我的應用程序頁面上。但是,當我在表單域中上傳名爲Notepad++
的圖像時,它會成功上傳到亞馬遜,但是我得到一張破損的圖像。查看其源,並試圖打開它的URL會產生一個錯誤
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>0DBACCF4C0301B02</RequestId>
<HostId>
raYVzr9xubG0NA/b57saIJzfc2YhnvhD0tafYmo34ewOBY6/0j1AKUFC/lEoY+6h
</HostId>
</Error>
出現這種情況與加號的所有名稱。可能是什麼問題呢。我嘗試了所有我可以但沒有的東西。這是我的image_uploader類
# encoding: utf-8
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
include CarrierWave::MimeTypes
process :set_content_type
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.name.to_s.downcase.underscore || model.id.to_s.underscore.downcase}"
end
def filename
"#{model.name.to_s.underscore.downcase}-#{secure_token}" if original_filename.present?
end
def default_url
"fallback/#{model.class.to_s.underscore}/" + [version_name, "noimage.gif"].compact.join('_')
end
version :nano_thumb do
process :resize_to_fill => [20, 20]
end
version :mini_thumb do
process :resize_to_fill => [25, 25]
end
version :small_thumb do
process :resize_to_fill => [34, 34]
end
version :thumb do
process :resize_to_fill => [48, 48]
end
version :small do
process :resize_to_fill => [86, 86]
end
version :medium do
process :resize_to_fill => [259, 259]
end
version :large do
process :resize_to_fill => [518, 518]
end
def extension_white_list
["jpg", "jpeg", "gif", "png", ""]
end
protected
def secure_token(length=9)
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2))
end
end
感謝
感謝它實際上沒有正確編碼字符的gem'carrierwave'。 – 2013-05-02 17:48:54