简体   繁体   English

Rails通过载波和雾将文件上传到Amazon S3

[英]Rails upload files to Amazon S3 with carrierwave and fog

I tried to upload movie files from my rails application to Amazon S3. 我试图将电影文件从我的Rails应用程序上传到Amazon S3。 First I tried paperclip, but it dosn't worked ... 首先,我尝试了回形针,但是没有用...

No I tried carrierwave + fog but same result nothing worked, no files stored in S3 no database entry and no errors ... 不,我尝试过载波+雾,但是相同的结果无效,没有文件存储在S3中,没有数据库条目,也没有错误...

My Files look like this: 我的文件如下所示:

app/uploader/movie_uploader.rb app / uploader / movie_uploader.rb

class MovieUploader < CarrierWave::Uploader::Base
   storage :fog
   def store_dir
         "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
   end
 end

config/initializers/carrierwave.rb config / initializers / carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
      provider:               'AWS',
      aws_access_key_id:      '--',
      aws_secret_access_key:  '--',
      region:                 'eu-central-1'
  }

  config.fog_directory    = 'movies'
end

app/models/movie.rb app / models / movie.rb

class Movie < ActiveRecord::Base
   mount_uploader :movie, MovieUploader
end

app/controller/movies_controller.rb app / controller / movies_controller.rb

class MoviesController < ActionController::Base
  layout "application"

   # Method to add a new Movie
   def addMovie
   if request.post?
      @movie = Movie.new(movies_params)
        if @movie.save
          redirect_to :addMovie
       end
    else
      @movie = Movie.new
    end
   end

  private
  def movies_params
     params.require(:movie).permit(:movietitle, :movieprice, :locked, :moviedescription, :currency, :language, :movie)
  end
end

upload form 上传表格

normal multipart form_tag 正常的多部分form_tag

    <%= form_for Movie.new, :html => {:multipart => true, :class => "form-horizontal", :role => "form"}, :method => :post, :url => {} do |f| %>

with file field 带文件字段

    <div class="form-group">
      <label><%= f.label :movie %></label>
      <%= f.file_field :movie, :class => "form-control", :placeholder => :movie %>
    </div>

I used this tutorial: https://u.osu.edu/hasnan.1/2014/03/13/rails-4-upload-image-to-s3-using-fog-and-carrierwave/ 我使用了本教程: https : //u.osu.edu/hasnan.1/2014/03/13/rails-4-upload-image-to-s3-using-fog-and-carrierwave/

Whats going wrong? 怎么了

I had the same problem. 我有同样的问题。 This fixed my problem. 这解决了我的问题。

In MovieUploader 在MovieUploader中

class MovieUploader < CarrierWave::Uploader::Base
   # Include RMagick or MiniMagick support:
   include CarrierWave::MiniMagick

   storage :fog
   def store_dir
     "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
   end
end

In config/carrierwave.rb 在config / carrierwave.rb中

if Rails.env.development? or Rails.env.test?
  CarrierWave.configure do |config|
    config.storage = :file
    config.enable_processing = false
  end

else
  CarrierWave.configure do |config|
    config.fog_credentials = {
      :provider               => 'AWS',            # required
      :aws_access_key_id      => 'ACCESS KEY',     # required
      :aws_secret_access_key  => 'ACCESS SECRET',  # required
      :region                 => 'eu-central-1'
    }
    config.fog_use_ssl_for_aws = false
    config.storage             = :fog
    config.fog_directory       = 'movies'          # required
  end
end

I hope this would be helpful. 我希望这会有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM