如何再次将AWS S3公用文件夹设为私有?
我正在测试一些临时数据,所以我在一个桶中公开了整个文件夹.我想再次限制它的访问权限.那么如何让文件夹再次保密呢?
我希望能够读取用户上传的XML文件(小于100kb),但不必先将该文件保存到数据库中.我不需要该文件超过当前操作(其内容被解析并添加到数据库;但是,解析文件不是问题).由于可以使用以下方式读取本地文件
File.read("export.opml")
Run Code Online (Sandbox Code Playgroud)
我想过只为:uploaded_file创建一个file_field,然后尝试用它来读取它
File.read(params[:uploaded_file])
Run Code Online (Sandbox Code Playgroud)
但所有这一切都是抛出一个TypeError(无法将HashWithIndifferentAccess转换为String).我真的尝试了很多不同的东西(包括从/ tmp目录中读取),但是没有一个能够工作.
我希望我的问题的简洁不会掩盖我试图自己解决这个问题所付出的努力,但我不想用一百种方法来污染这个问题,如何不完成它.非常感谢任何插话的人.
这是我的观点:
<% form_for(:uploaded_file, @feed, :url => {:action=>'parse'}, :html=> {:multipart=>true}) do |f| %> <p>
<%= f.label :uploaded_file, 'Upload your file.' %><br />
<%= f.file_field :uploaded_file %>
</p>
<p><%= f.submit 'upload' %></p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我设置了一个处理file_field上传的自定义操作(上传),在提交后,将其传递给另一个自定义操作(解析)进行处理.这可能是我问题的一部分吗?
Amazon提供了向匿名用户授予权限的示例,如下所示(请参阅Amazon S3存储桶策略的示例案例):
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在我的政策中,我已将"arn:aws:s3 ::: bucket /"中的"bucket"更改为"my-bucket".
但是,一旦我尝试访问该存储桶的文件夹中的图像,我就会收到以下访问被拒绝错误:
此XML文件似乎没有与之关联的任何样式信息.文档树如下所示.
(如果我明确地将该图像的属性更改为public,则重新加载其url,图像加载完美)
我究竟做错了什么?
更新#1:显然它与我可以访问的第三方网站有关.虽然它具有作为主用户(me)的所有权限,并且其对象位于同一文件夹中,具有完全相同的权限,但仍然不允许我将它们公开显示.不知道为什么.
更新#2:存储桶策略不适用于其他人"拥有"的对象,即使它们在您的存储桶中,请参阅我的答案以获取详细信息.
经过相当多的搜索,我仍然有点迷失.还有一些其他类似的问题涉及对多个模型进行分页,但它们要么没有答案,要么分别对每个模型进行讨论.
我需要立刻对帐户的所有记录进行分页.
class Account
:has_many :emails
:has_many :tasks
:has_many :notes
end
Run Code Online (Sandbox Code Playgroud)
所以,无论它们是什么,我都想找到30个最新的"东西".目前的分页解决方案是否可以实现这一目标?
喜欢使用一些渴望加载和Kaminari或will_paginate的组合?
或者,我应该首先设置所有这些东西的多态连接,称为Items.然后对最近的30个项目进行分页,然后查找这些项目的相关记录.
如果是这样,我不确定该代码应该是什么样子.有什么建议?
哪种方式更好?(甚至可能)
Rails 3.1,Ruby 1.9.2,app尚未投入生产.
ruby-on-rails will-paginate ruby-on-rails-3 kaminari ruby-on-rails-3.1
我需要通过Cloudmailin的POST请求接收传入的电子邮件作为multipart-formdata.POST类似于以下内容:
Parameters: {"to"=>"<email@exmaple.comt>", "from"=>"whomever@example", "subject"=>"my awesome subject line....
Run Code Online (Sandbox Code Playgroud)
实际上,接收和解析电子邮件非常简单,因为电子邮件只是以params:params [:to],params [:from]等发布.但是,如何在rails中模拟此POST请求?
我构建了一个虚拟rails应用程序来测试Cloudmailin,所以我有一个实际的请求.但是,它是一个6k字符的文件,所以我想加载这个文件作为POST请求的参数.我已经尝试使用内置的rails post和post_via_redirect方法来加载文件,但它会转义所有参数(\"to \"),这是不行的.有任何想法吗?
我需要能够为之前创建的项添加几天或几小时.
系统可以根据存储在db,:operator(add/subtract),:unit_of_time(hours/days)和:number中的属性来添加或减去一定数量的小时或天数.
我希望能够做到这样的事情:
Date.today+2.days
Run Code Online (Sandbox Code Playgroud)
其中"+"是:运算符,"2"是:数字,"days"是:unit_of_time但我不确定如何使插值的属性字符串成为实际运算符"+ 2.days" .有任何想法吗?
(我已经完成了ruby文档,但无济于事.目前,我只是在嵌套的if/else块中手动创建可能的选项(4)...是的,这很糟糕.)