Tag: amazon s3

Rails:如何将文件从S3发送到远程服务器

我一直在打猎,似乎无法找到一个好的解决方案。 My Rails应用程序将其文件存储在Amazon S3中。 我现在需要将它们发送到远程(第三方)服务。 我正在使用RestClient发布到第三方服务器,如下所示: send_file = RestClient::Request.execute( :method => :post, :url => “http://remote-server-url.com”, :payload => File.new(“some_local_file.avi”, ‘rb’), :multipart => true, etc…. ) 它适用于本地文件,但如何将S3中的远程文件直接发送到此第三方服务? 我在这里找到了一个答案,其中有人使用open-uri: ruby从S3读取带有open-URI的文件 我为自己测试了它,并且它有效。 :payload => open(URI.parse(“http://amazon-s3-example.com/some_file.avi”)) 但是,我在这里读到一条评论说open-uri只是将远程文件加载到内存中。 请参阅此答案的最新评论: https : //stackoverflow.com/a/264239/2785592 这不太理想,因为我正在处理潜在的大型video文件。 我还读过RestClient甚至将本地文件加载到内存中的某个地方; 再次,这不是理想的。 有谁知道这是真的吗? 当然,我不能成为唯一有这个问题的人。 我知道我可以在发送之前在本地下载S3文件,但我希望节省时间和带宽。 此外,如果RestClient确实将本地文件加载到内存中,那么在本地下载它并不能保存任何东西。 嘿嘿 任何建议将不胜感激。 谢谢 :) 更新:远程服务器只是一个响应发布请求的API。 我没有能力改变他们的结果。

Carrierwave处理的图像未上传到AWS S3

类似的问题,这个问题,但提供的解决方案并没有解决我的问题。 Carrierwave处理的图像未上传到S3 使用Railscast#383作为代码的基础: http : //railscasts.com/episodes/383-uploading-to-amazon-s3 使用carrierwave_direct将图像成功上传到S3。 我想用sidekiq在后台处理图像,然后上传到S3。 sidekiq工作者完成图像处理而没有错误,但处理后的图像(:thumb和:large)本地存储在public / uploads文件夹中。 知道为什么处理后的图像没有上传到S3? 提供者: class ImageUploader [200, 200] end version :large do process :resize_to_limit => [600, 400] end def extension_white_list %w(jpg jpeg gif png) end end 模型: class Photo :create has_many :comments, as: :commentable def image_name File.basename(image.path || image.filename) if image end def enqueue_image ImageWorker.perform_async(id, key) […]

Carrierwave在本地不存储s3上的图像

我使用载波上传图像并将其显示在照片库中。 载波在public/uploads存储文件。 但是这些图像没有在heroku上显示。 我发现heroku是只读的,我们应该在s3存储文件。 除了s3之外还有其他选择吗?如果是的话,请你在这里分享一下吗?

需要更改S3 Bucket(Carrierwave / Fog)中文件的存储“目录”

我正在使用带有3个独立模型的Carrierwave将照片上传到S3。 我保留了上传器的默认设置,即将照片存储在根S3存储桶中。 然后我决定根据模型名称将它们存储在子目录中,例如/ avatars,items /等等,根据它们从上传的模型… 然后,我注意到同名文件被覆盖,当我删除模型记录时,照片没有被删除。 我已经从上传者特定的设置更改了store_dir,如下所示: def store_dir “items” end 在模型ID下存储照片的通用版(我使用mongo FYI): def store_dir “uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}” end 这就是问题所在。 我试图将已经进入S3的所有照片移动到S3中的正确“目录”中。 从我准备好的,S3本身没有目录。 我在使用rake任务时遇到了麻烦。 由于我更改了store_dir,因此Carrierwave正在查找之前上传到错误目录中的所有照片。 namespace :pics do desc “Fix directory location of pictures on s3” task :item_update => :environment do connection = Fog::Storage.new({ :provider => ‘AWS’, :aws_access_key_id => ‘XXXX’, :aws_secret_access_key => ‘XXX’ }) directory = connection.directories.get(“myapp-uploads-dev”) Recipe.all.each […]

尝试设置亚马逊的S3存储桶:403禁止错误和设置权限

我正在关注Hartl的railstutorial.org并且已经到了11.4.4:生产中的图像上传 。 我做了什么: 注册amazon web services 在Amazon Identity and Access Management中,我创建了一个用户。 用户已成功创建。 在Amazon S3中,我创建了一个新存储桶。 设置新存储桶的权限: 权限:本教程指示“授予对上一步中创建的用户的读写权限”。 但是,在存储桶的“Permissons”下,未提及新用户的名称。 我只能选择Everyone,Authenticated用户,Log delivery,Me和用户名,亚马逊似乎已经从我的名字+数字创建了自己。 我通过选择Authenticated用户并选中了上传/删除和查看权限(而不是选择列表和编辑权限)框来尝试它。 我也通过选择Everyone并检查所有四个框来尝试它。 结果是一样的。 我按照本教程的说明在我的Rails应用程序中实现(我不相信那里有任何错误,所以我没有在这里包含这些步骤,以免使它太长)。 初始化程序carrier_wave.rb设置为以下代码。 我已经添加了region: ‘eu-west-1’到初始化器(我从这里得到的一个想法)来摆脱connecting to the matching region will be more performant的消息connecting to the matching region will be more performant 。 if Rails.env.production? CarrierWave.configure do |config| config.fog_credentials = { # Configuration for Amazon […]

为Amazon S3编写IAM策略和CORS配置

我对这一切都很陌生,但已经能够在我的Rails应用程序中使用头像/图像上传器。 用户可以将新的化身上传到我的S3桶,并且化身显示在Web应用程序中。 为此,我不得不向用户授予“AmazonS3FullAccess”政策。 这看起来有点太多了,因为来自应用程序的用户只需要写入(上传他的头像)并阅读(在网页上显示头像)权限。 您是否同意编写自定义策略而不是使用AmazonS3FullAccess更好? 如果是这样,我已经尝试了下面的政策代码(从这里采用),但这不起作用(尝试上传头像图像时出现403 Forbidden错误)。 有任何建议如何更正此代码? { “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Action”: [“s3:ListBucket”], “Resource”: [“arn:aws:s3:::mybucket”] }, { “Effect”: “Allow”, “Action”: [ “s3:PutObject”, “s3:GetObject”, “s3:DeleteObject” ], “Resource”: [“arn:aws:s3:::mybucket/*”] } ] }

如何设置Amazon S3,paperclip和ENV变量

我已经尝试了许多不同的方法来使用ENV变量设置S3以进行图像上传,并且无法使其工作。 我知道我的密钥和存储桶名称有效,因为当我将它们直接放入代码时,我的图像正确上传。 但是,当我尝试切换到ENV变量时,事情不起作用。 我使用了figaro gem,它创建了application.yml。 在那个文件中,我有: S3_BUCKET_NAME “xxxxx” AWS_ACCESS_KEY_ID: “AAAAAAAAA” AWS_SECRET_ACCESS_KEY: “BBBbbbBBBB” 不确定是否应该有任何引号,但是现在,我把它们放进去了。我也没试过。 在我的模型(listing.rb)中,我有: has_attached_file :image, :styles => { :medium => “200x” , :thumb => “100×100” }, :default_url => “default.png”, :storage => :s3, :s3_credentials => Proc.new{|a| a.instance.s3_credentials } def s3_credentials {:bucket => ENV[“S3_BUCKET_NAME”], :access_key_id => ENV[“AWS_ACCESS_KEY_ID”], :secret_access_key => ENV[“AWS_SECRET_ACCESS_KEY”] end 就像我说的,当我将值硬编码到def s3_credentials时,一切正常。 就在我试图交换ENV变量时,事情就会崩溃。 在paperclip.rb中,我有: Paperclip::Attachment.default_options[:s3_host_name] […]

Rails3,S3,Paperclip附件是它自己的型号吗?

所以,我正在开发一个应用程序,用户可以上传和管理照片,并附带一堆行业特定的元数据。 Photo模型中包含所有这些元数据,我正在使用Paperclip将实际图像文件附加到模型并将图像存储在Amazon S3上。 用户交互目前的工作方式如下: 用户单击“添加照片”并进入“新照片”页面,在该页面中,他将看到一个表单。 表单上的第一件事是文件选择器。 用户选择文件。 在此之下是用户填写的几个不同的元数据字段,因此用户填写这些元数据。 用户点击提交,文件上传并创建新的Photo对象,用户被重定向到不同的页面。 因此,我想做的明显改进是让照片在此过程开始时实际上传,以便在提交提交和重定向到下一页之间没有明显的延迟。 能够在完成上传后向用户显示他们的照片的缩略图预览也是很好的,这样他们就可以在填写表格时看到他们放入元数据的照片。 我认为如果我将图像文件拆分成自己的模型,我可以做到这一点,但我会指的是这样的图像: @photo.attachment.file.url而不是我现在使用的更简单的@photo.file.url 。 我宁愿不比我更深入地“筑巢”。 此外,将其分为两个模型会引发管理孤儿的问题,我目前无需处理这些问题。 所以我的问题是: 是否有一种好方法 – 最好不使用Flash – 来创建这种异步上传行为而不分成两个模型,或者 – 如果我必须将元数据和文件拆分为两个模型,是否有办法让Paperclip将附件视为自己的模型,以便我可以使用.而不是.来访问它.. ? 我知道这是一个很大的问题,所以非常感谢您的帮助!

如何使用rails应用程序中的s3在存储桶之间复制文件?

我目前正在开发一个rails应用程序,它试图在s3中将video从一个存储桶复制/移动到另一个存储桶。 但是我在rails应用程序上不断收到代理错误502。 在mongrel日志中,它说“未能分配内存”。 一旦发生此错误,应用程序就会死亡,我们必须重启。

如何将已存储在s3上的文件添加到由相同数据存储区支持的carrierwave?

我已经在我的s3中有文件,通过FTP上传,我只想将它们附加到我的模型,允许通过CarrierWave上传,如果我使用相同的存储桶存储我通过CarrierWave上传的文件我通过FTP上传的文件是否有办法将文件的s3密钥分配给(新)相关记录(通过模型),其中文件本身是通过CarrierWave的附件策略处理的?