1

こんにちは、フォグとキャリアウェーブを使用して s3 に画像をアップロードしようとしています。以前はパブリック フォルダーで作成していましたが、バケットで作成したいと考えています。新しい画像をアップロードしようとすると、次のようになります: URI::InvalidURIErrorin EventsController createbad URI(is not URI?)

私はいくつかの調査を行いましたが、それは名前の「+」記号に由来する可能性がありますが、「+」はありません。ここに私のパラメータ要求があります:

> {"utf8"=>"✓",
 "authenticity_token"=>"ms48hFw8dTALEe543dPS0ywIdKynYvuAHMjiry7kghQ=",
 "event"=>{"titre"=>"test des image avec S3",
 "dday(1i)"=>"2013",
 "dday(2i)"=>"3",
 "dday(3i)"=>"30",
 "lieux"=>"maison",
 "commentaire"=>"aucune",
 "pictures_attributes"=>{"0"=>{"name"=>"test",
 "image"=>#<ActionDispatch::Http::UploadedFile:0xa35a14c @original_filename="image.jpg",
 @content_type="image/jpeg",
 @headers="Content-Disposition: form-data; name=\"event[pictures_attributes][0][image]\"; filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n",
 @tempfile=#<File:/tmp/RackMultipart20130330-26465-11z9gsf>>}}},
 "commit"=>"Ajouter"}

https://github.com/jnicklas/carrierwaveからの指示に従いました。 ここにいくつかのコードがあります

CarrierWave.configure do |config|
    config.fog_credentials = {
        :provider               => 'AWS',                        # required
        :aws_access_key_id      => 'xxx',                        # required
        :aws_secret_access_key  => 'xxx',                        # required
        :region                 => 'eu-west-1',                  # optional, defaults to 'us-east-1'
        :host                   => 'xxx.com',             # optional, defaults to nil
        :endpoint               => '' # optional, defaults to nil
    }
    config.fog_directory  = 'socialmausoleum'                     # required
    config.fog_public     = true                                  # optional, defaults to true
    config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end

そして私のアップローダー:

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
  # include Sprockets::Helpers::RailsHelper
  # include Sprockets::Helpers::IsolatedHelper

  # Choose what kind of storage to use for this uploader:
  storage :file
  storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

ご回答ありがとうございます。

4

1 に答える 1

1

当てずっぽう

:endpoint               => '' # optional, defaults to nil

なし ≠ ''

したがって、リン全体を削除して、何が起こるかを確認してください。私が考えているのは、何かの最後に空の文字列を追加しようとしていて、「+」の後に何も続かないことです。

編集:

彼らのドキュメントから

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',                        # required
    :aws_access_key_id      => 'xxx',                        # required
    :aws_secret_access_key  => 'yyy',                        # required
    :region                 => 'eu-west-1',                  # optional, defaults to 'us-east-1'
    :host                   => 's3.example.com',             # optional, defaults to nil
    :endpoint               => 'https://s3.example.com:8080' # optional, defaults to nil
  }
  config.fog_directory  = 'name_of_directory'                     # required
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end

あなたの場合、一致すると思われる地域が必要になりますが、ホストやエンドポイントは必要ないと思います。

于 2013-03-31T20:13:25.440 に答える