Tag: amazon s3

建议在Ruby中为S3 Bucket生成预签名URL的方法

我正在尝试在我的Rails服务器上生成预先签名的URL以发送到浏览器,以便浏览器可以上传到S3。 似乎aws-sdk-s3是未来使用的gem。 但不幸的是,我没有遇到可以提供清晰度的gem文档。 似乎有几种不同的方式这样做,并希望对以下方法的差异提供任何指导 – 使用Aws::S3::Presigner.new ( https://github.com/aws/aws-sdk-ruby/blob/master/aws-sdk-core/lib/aws-sdk-core/s3/presigner.rb )但它似乎没有接受对象参数或身份validation凭据。 使用Aws::S3::Resource.new ,但似乎不会维护aws-sdk-resources 。 ( https://aws.amazon.com/blogs/developer/upgrading-from-version-2-to-version-3-of-the-aws-sdk-for-ruby-2/ ) 使用Aws::S3::Object.new然后在该对象上调用put方法。 直接使用AWS::SigV4 。 我想知道他们是如何不同的,以及选择一个而不是另一个的含义? 非常感谢任何建议,特别是使用aws-sdk-s3 。 谢谢!

使用Ruby将大文件上传到S3失败,出现内存不足错误,如何在块中读取和上载?

我们通过Ruby AWS SDK(v2)从Windows机器上传各种文件到S3。 我们已经使用Ruby 1.9进行了测试。 我们的代码工作正常,除非遇到大文件,抛出内存不足错误。 起初我们使用以下代码将整个文件读入内存: :body => IO.binread(filepath), 然后在Googling之后我们发现有很多方法可以用Ruby读取文件: :body => File.open(filepath, ‘rb’) { |io| io.read }, 但是这段代码没有解决问题,我们找不到特定的S3(或相关)示例,它显示了如何读取文件并以块的forms传递给S3。 整个文件仍然加载到内存中,并在大文件中引发内存不足错误。 我们知道我们可以将文件拆分为块并使用AWS多部件上传上传到S3,但是如果可能的话,首选是避免这种情况(尽管如果这是唯一的方法就没问题)。 我们的代码示例如下。 以块的forms读取文件,避免内存不足错误以及上传到S3的最佳方法是什么? require ‘aws-sdk’ filepath = ‘c:\path\to\some\large\file.big’ bucket = ‘s3-bucket-name’ s3key = ‘some/s3/key/file.big’ accesskeyid = ‘ACCESSKEYID’ accesskey = ‘ACCESSKEYHERE’ region = ‘aws-region-here’ s3 = Aws::S3::Client.new( :access_key_id => accesskeyid, :secret_access_key => accesskey, :region => […]

使用Paperclip和Padrino

背景:我正在使用Padrino,Ruby 1.9.2,HAML和Heroku构建一个简单的博客。 我希望post索引具有杂志般的外观。 对于索引中的每个post,用户应该看到标题,内容摘要和图像。 我的问题是附加图像。 问题:我一直在尝试使用Paperclip gem将图像附加到每个post。 Heroku将从Amazon S3 bin中捕获实际图像。 到目前为止,当我尝试运行迁移时,我收到错误: $ …/base.rb:1088:in `method_missing’: undefined method `has_attached_file’ for # (NoMethodError) 看起来像Paperclip只是不会加载,但是我被卡住了。 详细信息: – 问:当我“尝试运行迁移”时,我在做什么? – 答:我将以下内容放入迁移文件夹中 class AddPictureToPost < ActiveRecord::Migration def self.up change_table :posts do |t| t.has_attached_file :picture end end def self.down drop_attached_file :posts, :picture end end 然后运行“padrino rake ar:migrate” – 问:我是否在Gemfile中列出了Paperclip? – A:是的。 – […]

从AWS S3读取CSV文件时获取“Errno :: ENOENT:没有此类文件或目录@ rb_sysopen”

我有部署到Heroku的应用程序。 我添加了通过CSV上传用户的function。 为此,我提供了CSV上传function(二手Paperclip gem)。 这是我的代码,用于读取文件和创建新用户 def import(file) CSV.foreach(file.path, headers: true) do |row| row_hash = row.to_hash.values data = row_hash[0].split(“\t”) . . . end 在当地它工作正常。 但是在heroku上,它给了我以下错误 Errno::ENOENT: No such file or directory @ rb_sysopen – https://s3.amazonaws.com/…./…./sample_csv(2).csv 我在amazon-s3中引用了以下链接Errno :: ENOENT(没有这样的文件或目录) 文件从亚马逊服务器读取,ruby在轨道上,没有匹配路由 但没有任何成功。 为了更多的调试,我从我的本地rails控制台尝试了相同的URL,它给了我同样的错误。 2.2.2 :008 > cp = “https://s3.amazonaws.com/…./…./sample_csv(2).csv” 2.2.2 :008 > f = File.open(cp, “r”) Errno::ENOENT: No […]

`fetch’:找不到键:“S3_BUCKET_NAME”(KeyError)with paperclip / aws s3 / rails

我收到了’fetch’: key not found: “S3_BUCKET_NAME” (KeyError)使用’aws-sdk’,’〜> 2.3’和“paperclip”,“〜> 5.0.0”在rails(4.2.3 ‘fetch’: key not found: “S3_BUCKET_NAME” (KeyError)出现’fetch’: key not found: “S3_BUCKET_NAME” (KeyError)错误 我已经通过终端在我的环境中设置了密钥,并且运行heroku config显示它们已列出。 在我的config / environments / development.rb以及我的配置production.rb中,我包括: config.paperclip_defaults = { storage: :s3, s3_credentials: { bucket: ENV.fetch(‘S3_BUCKET_NAME’), access_key_id: ENV.fetch(‘AWS_ACCESS_KEY_ID’), secret_access_key: ENV.fetch(‘AWS_SECRET_ACCESS_KEY’), s3_region: ENV.fetch(‘AWS_REGION’), } } 我还在我的user.rb模型中包含了上面的代码,但为了便于参考,它在模型中看起来像这样: has_attached_file :avatar, styles: { medium: “300×300#”, thumb: “100×100#” }, :convert_options => […]

无法使用ruby脚本从amazon s3删除文件

我正在使用aws-sdk-ruby来删除我的amazon s3帐户中保存在存储桶中的文件,但我无法弄清楚为什么我能够使用以下代码从S3存储桶中删除所需的文件。 这是我的代码 require ‘aws-sdk-v1’ require ‘aws-sdk’ ENV[‘AWS_ACCESS_KEY_ID’] = “XXXXXXX” ENV[“AWS_SECRET_ACCESS_KEY”] = ‘/ZZZZZZZZ’ ENV[‘AWS_REGION’] = ‘us-east-1’ s3 = Aws::S3::Resource.new bucket = s3.bucket(‘some-bucket’) obj = bucket.object(‘https://s3.amazonaws.com/some-bucket/38ac8226-fa72-4aee-8c3d-a34a1db77b91/some_image.jpg’) obj.delete

使用S3 Presigned-URL上传一个文件,该文件将具有公共读取权限

我正在使用Ruby on Rails和AWS gem。 我可以获得上传和下载的预签名url。 但是当我得到URL时没有文件,因此在download-url上将acl设置为’public-read’不起作用。 用例是这样的:1,服务器为用户提供了一个将内容上传到我的存储桶的路径,如果没有凭据,则无法读取。 2,该内容需要在以后公开:任何人都可以阅读。 澄清一下:我没有上传文件,我提供的URL供我的用户上传。 那时,我还想给用户一个公众可读的URL。 如果我自己上传文件似乎会更容易。 此外,读取URL需要永不过期。

回形针可以从S3铲斗中读取照片几何图形吗?

我想从S3容器中读取照片的几何图形。 当它在我的本地,这工作: def photo_geometry(style = :original) @geometry ||= {} @geometry[style] ||= Paperclip::Geometry.from_file photo.path(style) end 但是当我将模型切换到S3时它似乎不起作用..任何建议? 更重要的是,我正在尝试编写一些代码,允许我从S3中检索照片,允许用户裁剪它们,然后将它们重新上传回仍然由回形针分配的S3。 编辑: 这是返回的错误: Paperclip::NotIdentifiedByImageMagickError: photos/199/orig/greatReads.png is not recognized by the ‘identify’ command. from /Users/daniellevine/Sites/hq_channel/vendor/gems/thoughtbot-paperclip-2.3.1/lib/paperclip/geometry.rb:24:in `from_file’ from /Users/daniellevine/Sites/hq_channel/app/models/photo.rb:68:in `photo_geometry’ from (irb):1

从S3下载文件到Rails 4应用程序

我有一个AWS VM,它运行每日任务并生成多个文件。 我希望我的Rails应用程序下载这些文件并将它们放在应用程序中的文件夹中。 Ruby中是否有一个gem或方法可以做到这一点? 我知道如何使用s3cmd在bash中执行此操作,我想我可以创建一个脚本来以这种方式获取它们,但是寻找更原生的rails方式。 我正在使用这些文件中的数据作为应用程序,但我不希望用户能够下载它们。

列出存储桶时,Ruby Amazon S3 Access被拒绝

Ruby newb在这里。 我获得了亚马逊云数据的访问权。 我开始认为访问键是关闭但我可能是错的。 有人帮忙! 我有aws文件夹作为插件 >> Version => “0.6.3” >> AWS::S3::Base.establish_connection!(:access_key_id =>’*******’, :secret_access_key => ‘*****’) => #”s3.amazonaws.com”, :port=>80, :access_key_id=>”****”, :secret_access_key=>”****”}, @access_key_id=”****”, @secret_access_key=”****”, @http=#> >> AWS::S3::Service.buckets => AWS::S3::AccessDenied: Access Denied from /Users/PBR/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.3/lib/aws/s3/error.rb:38:in `raise’ from /Users/PBR/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.3/lib/aws/s3/base.rb:72:in `request’ from /Users/PBR/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.3/lib/aws/s3/base.rb:88:in `get’ from /Users/PBR/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.3/lib/aws/s3/service.rb:21:in `buckets’ from /Users/PBR/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.3/lib/aws/s3/extensions.rb:183:in `block in buckets’ from /Users/PBR/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.3/lib/aws/s3/extensions.rb:152:in `expirable_memoize’ from /Users/PBR/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/aws-s3-0.6.3/lib/aws/s3/extensions.rb:182:in `buckets’