我试图准确理解如何设置一个通常是私有的存储桶,但允许匿名上传有限制.具体标准是:
我的问题是:
到期时间似乎可以通过S3 Management Console设置,但最短到期时间限制为1天.我可以在该字段中输入小数吗?权限似乎适用于整个存储桶而不仅仅是前缀.这让我觉得我只需要两个水桶.如果我保留一个存储桶,我认为我需要创建一个IAM策略并将其应用到存储桶中,但这超出了我对S3的有限知识,我想确保我不会在允许人们做的权限中留下漏洞比我想要他们更多.
我已经找到很多关于通过HTTP表单帖子匿名上传到S3的文档.我可以将其改编成代码,但我想知道,因为我在应用程序代码(而不是HTTP表单帖子)是否有更简单的方法?
我需要在一个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的Mongo驱动程序缺少renameCommand函数.有参考通过管理数据库执行此操作.但是,如果没有对该数据库的登录权限,似乎更新版本的Mongo驱动程序不会让您"使用"管理数据库.所以这种方法不再适用.我也读过这在分片环境中不起作用,虽然这对我来说不是一个问题.
人们似乎有的另一个建议是迭代"from"集合并插入"to"集合.使用正确的WriteConcern(fire and forget),这可能相当快.但它仍然意味着将网络上的每条记录下载到PHP进程中,然后通过网络将其上传回数据库.
理想情况下,我希望有一种方法可以在服务器端进行.类似于SQL中的INSERT INTO ... SELECT ... 这样,它具有快速,网络效率和PHP负载低的特点.
我想从我的数据库中的集合中检索字段的区域值.该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) 我正在寻找在JavaScript中实现低冲突的快速哈希.它不需要是加密哈希.我基本上使用它来查看某个给定文件是否已经上传(或部分上传)到用户的帐户,以便在大(视频)文件上保存一些上传时间.
我正在使用新的HTML5文件API来读取文件的切片.然后我把它交给SparkMD5给我一个文件的哈希值.我喜欢SparkMD5允许我进行增量散列的事实,所以我不必在内存中读取整个内容.
总的来说,SparkMD5可以满足我的需求,但对于大型文件,它可能需要一段时间才能获得我的哈希值(300MB文件大约需要30秒).我希望减少这一点.我不是那么了解哈希函数,所以我不想寻找一些东西,并且理想地寻找已经实现的库.
mongodb ×2
php ×2
acl ×1
amazon-s3 ×1
anonymous ×1
compilation ×1
fileapi ×1
hash ×1
html5 ×1
http-post ×1
javascript ×1
performance ×1