私は、フォグストレージでキャリアウェーブを使用するレールアプリケーションに取り組んでいます。フォームには、ユーザーがアプリを送信できるフィールドがいくつかあります (名前、短い説明と長い説明、画像フィールド)。アップロードされたファイルの名前は、フォームの「名前」フィールドにある名前から取得されます。
たとえば、次の名前のファイルをアップロードすると、Notepad
すべてが正常に機能し、画像がアプリ ページに表示されます。ただしNotepad++
、フォーム フィールドに名前を付けて画像をアップロードすると、Amazon には正常にアップロードされますが、壊れた画像が表示されます。ソースを表示して 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
ありがとう