Tag: amazon s3

Seahorse :: Client :: NetworkingError使用rails上传Amazon S3文件

在我的rails 4应用程序中,我正在尝试下载,然后使用aws-sdk(使用gem ‘aws-sdk’, ‘~> 2′ )将常规png文件上传到我的s3存储桶。 在开发环境中,代码完全正常。 但是如果我尝试使用rails s -e production或者如果我测试了我的heroku实例上的上传,那么当我测试图像上传function时,我会收到以下错误: Seahorse::Client::NetworkingError (Connection reset by peer): app/helpers/aws_s3.rb:73:in `upload_to_s3′ app/controllers/evaluations_controller.rb:19:in `test’ 我在跟踪中提到的upload_to_s3方法如下所示: def upload_to_s3(folder_name) url = “http://sofzh.miximages.com/ruby-on-rails/WKeQQox.png” filename = “ss-” + DateTime.now.strftime(“%Y%d%m-%s”) + “-” + SecureRandom.hex(4) + “.png” full_bucket_path = Pathname(folder_name.to_s).join(filename).to_s file = save_to_tempfile(url, filename) s3 = Aws::S3::Resource.new(access_key_id: ENV[“IAM_ID”], secret_access_key: ENV[“IAM_SECRET”], region: ‘us-east-1’) s3_file = s3.bucket(ENV[“BUCKET”]).object(full_bucket_path) […]

如何在Python中解密AWS Ruby客户端加密

AWS的S3 SDK for Ruby允许对文件进行客户端(“信封”)加密。 它是客户端密钥的AES CBC / ECB加密的组合,其中包络密钥和初始化向量存储在元数据中。 我有一个Ruby开发人员,它已经加密了S3存储桶中的各种文件,我需要使用Python检索和解密。 Python S3 AWS SDK目前没有此客户端function。 假设使用Ruby bucket.write S3 API的encryption_key参数加密文件: #!/usr/bin/ruby # coding: utf-8 require ‘aws-sdk’ require ‘openssl’ access_key = ” secret_access_key = ” encryption_key = “passwordpassword” s3 = AWS::S3.new storage_host = “our_bucket” storage_path = “prod/master_report/test.txt” bucket_obj = s3.buckets[storage_host].objects[storage_path] bucket_obj.write(file: ‘test.txt’, encryption_key: encryption_key) 有没有办法用Python解密文件而不是使用Ruby SDK?

基于浏览器的上传使用POST

我正在尝试使用带有AWS签名版本4的POST创建客户端上传。 根据文件 当我在服务器端生成签名时,我得到与此示例页面中提到的AWS签名完全匹配。 但是,当我使用它上传页面时,我收到此错误: SignatureDoesNotMatch我们计算的请求签名与您提供的签名不匹配。 检查您的密钥和签名方法 这是我用过的代码: OpenSSL::HMAC.hexdigest(‘sha256’, signing_key(string_to_sign), string_to_sign) # step 2 in the aws documentation def signing_key(encoded_policy) # generate the correct date date = extract_encoded_policy_date(encoded_policy) date = time_adjust(date) # encode all the fields by the algorithm date_key = OpenSSL::HMAC.digest(‘sha256’,”AWS4#{@secret_access_key}”, date.strftime(“%Y%m%d”)) date_region_key = OpenSSL::HMAC.digest(‘sha256’,date_key, @region) date_region_service_key = OpenSSL::HMAC.digest(‘sha256’,date_region_key, @service) signing_key = OpenSSL::HMAC.digest(‘sha256’,date_region_service_key, ‘aws4_request’) signing_key […]

无法使用HMAC SHA256从示例中重现AWS签名

我正在关注这个例子 http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html 并试图重现64个字符串的签名,他们声称… aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404 我已成功匹配Canonical Request的hex digeset,并确认StringToSign字符串是正确的。 最后一部分是计算signing_key和签名。 这是我使用提供的ruby函数’getSignatureKey’击中路障的地方 http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-ruby signing_key = getSignatureKey secret_access_key, current_date, region, aws_service signature = OpenSSL::HMAC.digest(‘sha256’, signing_key, string_to_sign) def getSignatureKey key, dateStamp, regionName, serviceName kDate = OpenSSL::HMAC.digest(‘sha256’, “AWS4” + key, dateStamp) kRegion = OpenSSL::HMAC.digest(‘sha256’, kDate, regionName) kService = OpenSSL::HMAC.digest(‘sha256’, kRegion, serviceName) kSigning = OpenSSL::HMAC.digest(‘sha256′, kService, “aws4_request”) kSigning end ‘signature’的当前输出是这个奇怪的字符序列。 ٻ . […]

如何解析位于Amazon S3存储桶中的CSV文件

下面是我用来从应用程序中解析CVS的代码,但我想解析位于Amazon S3存储桶中的文件。 它也需要在推送到Heroku时工作​​。 namespace :csvimport do desc “Import CSV Data to Inventory.” task :wiwt => :environment do require ‘csv’ csv_file_path = Rails.root.join(‘public’, ‘wiwt.csv.txt’) CSV.foreach(csv_file_path) do |row| p = Wiwt.create!({ :user_id => row[0], :date_worn => row[1], :inventory_id => row[2], }) end end end

在Amazon S3中列出给定级别的目录

我在亚马逊S3桶中存储了200万个文件。 下面有一个给定的根(l1),l1下的目录列表,然后每个目录包含文件。 所以我的桶看起来像下面这样 l1/a1/file1-1.jpg l1/a1/file1-2.jpg l1/a1/… another 500 files l1/a2/file2-1.jpg l1/a2/file2-2.jpg l1/a2/… another 500 files …. l1/a5000/file5000-1.jpg 我想尽快列出第二级条目,所以我想得到a1,a2,a5000。 我不想列出所有的密钥,这将花费更长的时间。 我很乐意直接使用AWS api,但是到目前为止我已经使用了ruby中的right_aws gem http://rdoc.info/projects/rightscale/right_aws 该gem中至少有两个API,我尝试在S3模块中使用bucket.keys(),在S3Interface模块中使用incrementally_list_bucket()。 例如,我可以设置前缀和分隔符来列出所有l1 / a1 / *,但我无法弄清楚如何仅列出l1中的第一级。 在incrementally_list_bucket()返回的哈希中有一个:common_prefixes条目,但在我的测试样本中没有填写。 S3 API可以实现此操作吗? 谢谢!

回形针使用Heroku设置Amazon S3

has_attached_file :image, :storage => :s3, :s3_credentials => “#{RAILS_ROOT}/config/s3.yml”, :path => “/:style/:filename” 我不确定是什么:path => “/:style/:filename”是。 我还想为这个附加图像添加样式,那是什么:路径是什么? 我想要的样式是:styles => { :medium => “275×275>”, :thumb => “175×155>” } 基本上这里发生的是我正在设置heroku并且我不得不使用S3,这似乎很简单,只是不习惯这个附件约定的东西。 此外,我刚刚注册了一个S3帐户……但是heroku正在宣传它的免费或其他东西。 这有什么用?

为什么Ruby open-uri打开在我的unit testing中返回一个StringIO,但在我的控制器中是一个FileIO?

我inheritance了一个Rails 2.2.2应用程序,用于在Amazon S3上存储用户上传的图像。 基于attachment_fu的Photo模型提供了一种rotate方法,该方法使用open-uri从S3和MiniMagick中检索图像以执行旋转。 rotate方法包含此行以检索用于MiniMagick的图像: temp_image = MiniMagick::Image.from_file(open(self.public_filename).path) self.public_filename返回类似的内容 http://s3.amazonaws.com/bucketname/photos/98/photo.jpg 检索图像并旋转它在生产和开发中运行的应用程序中工作得很好。 但是,unit testing失败了 TypeError: can’t convert nil into String /Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `initialize’ /Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `open’ /Users/santry/Development/totspot/vendor/gems/mini_magick-1.2.3/lib/mini_magick.rb:34:in `from_file’ 原因是当在unit testing的上下文中调用模型方法时, open(self.public_filename)返回包含图像数据的StringIO对象。 此对象上的path方法返回nil并且MiniMagick::Image.from_file爆炸。 当从PhotosController调用这个相同的模型方法时, open(self.public_filename)返回绑定到名为/tmp/open-uri7378-0的文件的FileIO实例,该文件包含图像数据。 考虑原因必须是测试和开发之间的一些环境差异,我在开发环境下启动了控制台。 但就像在unit testing中一样, open(‘http://…’)返回了一个StringIO , 而不是 FileIO 。 我已经通过open-uri和所有相关的应用程序特定代码进行了跟踪,并且没有找到差异的理由。

Ruby on Rails,Paperclip,亚马逊AWS S3和Heroku

我尝试了两天,让我的所有网站都通过Heroku和亚马逊AWS S3在互联网上工作(存储我的图像),但……我无法做到! 为了简化,我想使用带有回形针的Heroku和Amazon AWS S3来上传图片并进行显示。 我遵循了很多教程但是,这个总结了我所做的一切: https : //devcenter.heroku.com/articles/paperclip-s3 上传系统适用于本地的基本存储,但如果我按照教程并将此代码放在我的环境中,我就会出错 config.paperclip_defaults = { :storage => :s3, :s3_credentials => { :bucket => ENV[‘S3_BUCKET_NAME’], :access_key_id => ENV[‘AWS_ACCESS_KEY_ID’], :secret_access_key => ENV[‘AWS_SECRET_ACCESS_KEY’] } } 首先是我的代码,然后我会写出我在本地的错误,以及我尝试在Internet上测试时的错误(Heroku打开)。 我的代码: develpment.rb: Blabla::Application.configure do # Settings specified here will take precedence over those in config/application.rb. # In the development environment your application’s code is […]

通过单击Amazon S3上托管的链接更改jPlayer上的歌曲

各位大家好,感谢您提前帮助。 我有一个ruby on rails应用程序,我试图通过jPlayer传输音频,jPlayer托管在S3上。 到目前为止,我上传文件或使用内置播放器播放音频文件,甚至使用S3上的歌曲初始化jPlayer都没有问题。 当我开始改变歌曲时会出现问题。 我像这样初始化jPlayer: $(‘a.html5’).click(function() { var url = $(this).attr(‘href’); $(“#jquery_jplayer_1”).jPlayer({ ready: function (event) { $(this).jPlayer(“setMedia”, { mp3: url }); }, swfPath: “javascripts”, supplied: “mp3”, wmode: “window” }); return false; }); 其中mp3:url指向S3 URL(这一切都很好)。 这允许我从链接列表中选择一首歌曲,它加载并开始播放没有问题。 问题是,当我尝试更改歌曲时,我收到了一个access-control-allow-origin错误。 所以我尝试了以下内容: $(‘a.html5’).click(function() { var url = $(this).attr(‘href’); $(“#jquery_jplayer_1”).jPlayer(“setMedia”, mp3: url).jPlayer(“play”); return false; }); 这仍然给我一个access-control-allow-origin错误。 我一直在靠墙砸几个小时试图解决这个问题。 所以基本上总结一下,我可以初始化jPlayer并播放一首歌很好,但是当我想改变一首歌时,access-control-allow-origin错误毁掉了我的一天。 有任何想法吗?