繁体   English   中英

将文件上传到Amazon S3

[英]rails uploading file to Amazon S3

我想将文件从Rails应用程序直接上传到AmazonS3。 现在的配置看起来像这样:

宝石文件

宝石“回形针”

宝石'aws-sdk'

在config / application.rb中

# Amazon S3 configuration for paperclip
config.paperclip_defaults = {
    :storage => :s3,
    :s3_host_name => 's3-eu-west-1.amazonaws.com'
}

型号-movie.rb

class Movie < ActiveRecord::Base

   # add File to Movie association on column mo
   has_attached_file :movie,
                :storage => :s3,
                :bucket => '--',
                :s3_credentials => {
                    :bucket => '---',
                    :access_key_id => '---',
                    :secret_access_key => '---'
                }

  # validdates the file type
  validates_attachment_content_type :movie, :content_type => /\Avideo\/.*\Z/

end

控制器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)
      @movie = Movie.new(params[:movie])
      if @movie.save
        flash[:notice] = t("flash.moveuploadstarted")
        redirect_to :addMovie
      end
    else
      @movie = Movie.new
    end
  end


  private

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

end

数据库如下所示: 在此处输入图片说明

当我填写表格并发送电影时,浏览器将开始上传电影,该行为将显示在左下角。 但是当达到100%时,电影不会存储到Amazon S3并且DB为空,但是没有错误。

可能是什么问题呢?

更新:

上传表单具有该视频的输入文件

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

对于傻笑,您可以尝试将存储桶名称,访问密钥和秘密密钥输入到application.rb文件中吗? 我想知道桶和其他信息是否需要在配置文件中

这是使用载波的代码,但是对于paperpclip应该相同(顺便说一下,建议使用载波)

注意它应该在配置初始化文件中

config/initializers/carrier_wave.rb

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      # Configuration for Amazon S3
      :provider              => 'AWS',
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY']
    }
    config.fog_directory     =  ENV['S3_BUCKET']
  end
end

您是否尝试过将params [:movie]打印到控制台?

puts params[:movie]

看起来您是从参数中获取电影哈希,而不是从哈希中的字段获取值。 我建议您使用一个字段名称来保存视频文件,例如movie_video。

 class Movie < ActiveRecord::Base

       # add File to Movie association on column mo
       has_attached_file :movie_video,
                    :storage => :s3,
                    :bucket => '--',
                    :s3_credentials => {
                        :bucket => '---',
                        :access_key_id => '---',
                        :secret_access_key => '---'
                    }

      # validdates the file type
      validates_attachment_content_type :movie_video, :content_type => /\Avideo\/.*\Z/

end

暂无
暂无

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

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