0

s3_direct_upload Gem を使用して、指定された指示に従いました。画像が添付されたアップロードフォームを送信すると、新しい「アップロード」アイテムが作成されますが、画像は S3 に送信されません (または表示のために戻されます)。

私はDeviseを介してuser.rbモデルを持っていますが、画像に使用しているモデルはupload.rbです。

画像フォームを送信するときに開発モードで取得しているログを次に示します。新しい「アップロード」項目には、作成日と ID 以外は何も追加されていないことがわかります (それ以外はすべて nil)。補足 - このログに自分のバケット名が表示されている必要がありますか (表示されていません)。

追加情報: 私の s3 コンソールで、バケットを削除しました。以下でも同じ出力が得られます。それで、情報をs3に送信していないようですか?それを引き起こす可能性のあるアイデアはありますか?

2013-05-12 19:10:52 -0400 で 127.0.0.1 の POST "/uploads" を開始しました UploadsController#create as /による処理 パラメータ: {"utf8"=>"√", "key"=>"uploads/1368400251964-ol9ja4ijq0110pb9-bf206 97a98bbff7c58a83d7bfaa84800/${filename}", "acl"=>"public-read", "AWSAccessKeyId" =>" AKIAI2EXMFCUTILIGG", "policy"=>"eyJleHBpcmF0aW9uIjoiMjAxMy0wNS0xM1QwOToxMDo 0N1oiLCJjb25kaXRpb25zIjpbWyJzdGFydHMtd2l0aCIsIiR1dGY4IiwiIl0sWyJzdGFydHMtd2l0aCI sIiRrZXkiLCJ1cGxvYWRzLyJdLFsic3RhcnRzLXdpdGgiLCIkeC1yZXF1ZXN0ZWQtd2l0aCIsIiJdLFs iY29udGVudC1sZW5ndGgtcmFuZ2UiLDAsNTI0Mjg4MDAwXSxbInN0YXJ0cy13aXRoIiwiJGNvbnRlbnQ tdHlwZSIsIiJdLHsiYnVja2V0IjoibGl2ZXBlcmNoIn0seyJhY2wiOiJwdWJsaWMtcmVhZCJ9LHsic3V jY2Vzc19hY3Rpb25fc3RhdHVzIjoiMjAxIn1dfQ==", "signature"=>"f9R5QeLx4nllEKug805CV1 OJTu0=", "success_action_status"=>"201", "X-Requested-With"=>"xhr", "content-type"=>"image/jpeg", "file"=>#>} ←[1m←[36mUser Load (1.0ms)← [0m ←[1mSELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1←[0m ←[1m←[35m (0.0ms)←[0m BEGIN
←[1m←[36mSQL (81.0ms)←[0m ←[1mINSERT INTO "uploads" ("created_at", "image_url", "name", "product_id", "updated_at") VALUES ($1, $2, $3, $4) , $5) RETURNING "id"←[0m [["created_at", 2013 年 5 月 12 日 (日) 23:10:52 UTC +00:00], ["image_url", nil] , ["name", nil], [ "product_id", nil], ["updated_at", Sun, 12 May 2013 23:10:52 UTC +00:00]] ←[1m←[35m (18.0ms)←[0m COMMIT レンダリングされたアップロード/_upload.html。 erb (1.0ms)
レンダリングされた uploads/create.js.erb (4.0ms) 127ms で 200 OK を完了 (ビュー: 22.0ms | ActiveRecord: 101.0ms)

これが mu upload.rb モデルです。

 class Upload < ActiveRecord::Base
  attr_accessible :image_url, :name, :product_id
  before_create :default_name
   def default_name
    self.name ||= File.basename(image_url, '.*').titleize if image_url
   end  
end

s3 への送信をトリガーする画像フォーム コードを次に示します。

 <%= s3_uploader_form callback_url: uploads_url, callback_param: upload[image_url]", id: "myS3Uploader" do %>
  <%= file_field_tag :file, multiple: true %>
<% end %>

これは、私の s3 情報を格納するために Gem が必要とする初期化ファイルです。キーとバケット名を編集しました。

S3DirectUpload.config do |c|
      c.access_key_id = "AWS_KEY"       # your access key id
      c.secret_access_key = "AWS_SECRET_KEY"   # your secret access key
      c.bucket = "AWS_BUCKET_NAME"              # your bucket name
      c.region = ""              # region prefix of your bucket url (optional), eg. "s3-eu-west-1"
      c.url = ""                 # S3 API endpoint (optional), eg. "https://#{c.bucket}.s3.amazonaws.com/"
    end

そして、ここにモデルの create.js.erb ファイルがあります

<% if @upload.new_record? %>
  alert("Failed to upload: <%= j @upload.errors.full_messages.join(', ').html_safe %>");
<% else %>
  $("#uploads").append("<%= j render(@upload) %>");
<% end %>

私はレールに少し慣れていないので、これに夢中になっています。どんな助けにも感謝します!

4

1 に答える 1

0

設定の URL とリージョンを空白の文字列として削除し、それらを nil に設定するか省略してみてください。

于 2013-05-23T17:13:10.087 に答える