小编Eri*_*son的帖子

S3 - 匿名上传 - 密钥前缀

我试图准确理解如何设置一个通常是私有的存储桶,但允许匿名上传有限制.具体标准是:

  • 存储桶主要是私有的,需要我的密钥/秘密来添加/删除/更新/列出文件.
  • 有一个名为"incoming"的"目录"(即密钥前缀),允许匿名用户上传内容但不上传.
  • 存储桶的所有内容都有一天到期.作为奖励,我希望"传入"目录有30分钟到期,但如果不可能,整个存储桶的一天到期将会这样做.
  • 具有"传入"前缀的文件将限制每个对象的大小.
  • 我可能还希望将带有"incoming"前缀的对象限制为仅限于某些内容类型.

我的问题是:

  1. 简单地创建两个桶会更好吗?一个用于我的传入文件,一个用于我自己的个人处理和存储?
  2. 对于要上传到传入目录的文件,代码看起来是什么样的.理想情况下,我想避免依赖于S3库,只使用HTTP调用.如果你能在Ruby上向我展示正确的方向,那就是奖励积分.:)

到期时间似乎可以通过S3 Management Console设置,但最短到期时间限制为1天.我可以在该字段中输入小数吗?权限似乎适用于整个存储桶而不仅仅是前缀.这让我觉得我只需要两个水桶.如果我保留一个存储桶,我认为我需要创建一个IAM策略并将其应用到存储桶中,但这超出了我对S3的有限知识,我想确保我不会在允许人们做的权限中留下漏洞比我想要他们更多.

我已经找到很多关于通过HTTP表单帖子匿名上传到S3的文档.我可以将其改编成代码,但我想知道,因为我在应用程序代码(而不是HTTP表单帖子)是否有更简单的方法?

acl anonymous http-post amazon-s3 amazon-web-services

16
推荐指数
1
解决办法
8348
查看次数

将PHP编译为静态二进制文件

我需要在一个PHP安装有点破坏的系统上运行php脚本.而不是尝试解决问题,我想用我自己的PHP二进制文件打包我的代码(我可以执行一个可执行文件).我想要一个简单的php二进制文件,它包含我需要编译的所有模块.我的一般过程是:

./configure --enable-static --enable-cli --disable-all
Run Code Online (Sandbox Code Playgroud)

这给了我一个没有扩展名的php二进制文件.从这里我可以添加我需要的扩展.例如,添加curl和json支持

./configure --enable-static --enable-cli --disable-all --with-curl --enable-json
Run Code Online (Sandbox Code Playgroud)

这似乎普遍适用.我的脚本需要libxml支持才能与AWS交互.所以我添加--enable-libxml --enable-simplexml了configure命令.当我将二进制文件复制到远程计算机时,尝试使用看起来像这样的XML库时会出错:

/usr/lib/x86_64-linux-gnu/libxml2.so.2: version `LIBXML2_2.9.0' not found
Run Code Online (Sandbox Code Playgroud)

显然它是动态链接到libxml2.我认为这意味着虽然PHP扩展被静态编译为PHP,但PHP扩展正在使用的库不是.运行ldd确认了这一点:

$ ldd sapi/cli/php
linux-vdso.so.1 =>  (0x00007fff05cf3000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f3c69f82000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f3c69d68000)
libcurl.so.4 => /lib64/libcurl.so.4 (0x00007f3c69afc000)
librt.so.1 => /lib64/librt.so.1 (0x00007f3c698f4000)
libm.so.6 => /lib64/libm.so.6 (0x00007f3c695ed000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3c693e8000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f3c691cf000)
libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f3c68e66000)
libz.so.1 => /lib64/libz.so.1 (0x00007f3c68c4f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3c68890000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f3c6860f000)
libidn.so.11 => /lib64/libidn.so.11 (0x00007f3c683db000)
libssh2.so.1 => /lib64/libssh2.so.1 (0x00007f3c681b1000) …
Run Code Online (Sandbox Code Playgroud)

php compilation static-libraries

14
推荐指数
1
解决办法
6391
查看次数

用PHP重命名Mongo集合

PHP的Mongo驱动程序缺少renameCommand函数.有参考通过管理数据库执行此操作.但是,如果没有对该数据库的登录权限,似乎更新版本的Mongo驱动程序不会让您"使用"管理数据库.所以这种方法不再适用.我也读过这在分片环境中不起作用,虽然这对我来说不是一个问题.

人们似乎有的另一个建议是迭代"from"集合并插入"to"集合.使用正确的WriteConcern(fire and forget),这可能相当快.但它仍然意味着将网络上的每条记录下载到PHP进程中,然后通过网络将其上传回数据库.

理想情况下,我希望有一种方法可以在服务器端进行.类似于SQL中的INSERT INTO ... SELECT ... 这样,它具有快速,网络效率和PHP负载低的特点.

php mongodb

8
推荐指数
1
解决办法
2239
查看次数

在Mongo中分离不同的价值观

我想从我的数据库中的集合中检索字段的区域值.该distinct命令是显而易见的解决方案.问题是某些字段具有大量可能的值并且不是简单的原始值(即,复杂的子文档而不仅仅是字符串).这意味着结果很大,导致我将结果传递给客户端.

显而易见的解决方案是对得到的不同值进行分页.但我找不到最佳方法来做到这一点.由于distinct没有分页选项(限制,跳过等),我转向聚合框架.我的基本管道是:

[
  {$match: {... the documents I am interested in ...}},
  {$group: {_id: '$myfield'},
  {$sort: {_id: 1},
  {$limit: 10},
]
Run Code Online (Sandbox Code Playgroud)

这给了我前10个唯一值myfield.为了获得下一页,将向管道中添加$ skip运算符.所以:

[
  {$match: {... the documents I am interested in ...}},
  {$group: {_id: '$myfield'},
  {$sort: {_id: 1},
  {$skip: 10},
  {$limit: 10},
]
Run Code Online (Sandbox Code Playgroud)

但有时候,我从中收集唯一值的字段是一个数组.这意味着我必须在分组之前解开它.所以:

[
  {$match: {... the documents I am interested in ...}},
  {$unwind: '$myfield'}
  {$group: {_id: '$myfield'},
  {$sort: {_id: 1},
  {$skip: 10},
  {$limit: 10},
]
Run Code Online (Sandbox Code Playgroud)

其他时候,我获得唯一值的字段可能不是数组,但它的父节点可能是一个数组.所以:

[
  {$match: {... the documents …
Run Code Online (Sandbox Code Playgroud)

performance mongodb aggregation-framework

7
推荐指数
0
解决办法
1684
查看次数

JavaScript for Files中的快速低冲突非加密哈希

我正在寻找在JavaScript中实现低冲突的快速哈希.它不需要是加密哈希.我基本上使用它来查看某个给定文件是否已经上传(或部分上传)到用户的帐户,以便在大(视频)文件上保存一些上传时间.

我正在使用新的HTML5文件API来读取文件的切片.然后我把它交给SparkMD5给我一个文件的哈希值.我喜欢SparkMD5允许我进行增量散列的事实,所以我不必在内存中读取整个内容.

总的来说,SparkMD5可以满足我的需求,但对于大型文件,它可能需要一段时间才能获得我的哈希值(300MB文件大约需要30秒).我希望减少这一点.我不是那么了解哈希函数,所以我不想寻找一些东西,并且理想地寻找已经实现的库.

javascript hash html5 fileapi

6
推荐指数
1
解决办法
1842
查看次数