我正在为我的公司开发文件上传服务.我们的用户经常向我们发送非常大的.zip文件,其中包含非常大的插图文件.通常文件不会大于1.5GB,但我需要计划处理高达4GB的文件.
显然,这引起了很多关于如何配置我的Apache以允许这样大的文件传输而不会使我的服务器过载或打开安全漏洞的问题.
关注1:内存限制
我的系统的一个特点是用户应该能够在上传文件后将文件下载回来.由于安全问题,我避免使用标准下载(只是链接到文件) - 我不能让其他用户下载其他文件.我的解决方案是将上传的文件保存在www-root之外的受保护目录中,并通过PHP脚本加载它们.PHP脚本看起来有点像这样:
$fo = fopen($uploadDir.$file_name, "r");
while(!feof($fo)) {
$strang = fread($fo, 102400);
echo $strang;
ob_flush();
}
fclose($fo);
Run Code Online (Sandbox Code Playgroud)
我已经将fread放入循环中并将其锁定为仅一次加载文件的小块.我这样做是因为我的服务器只有4GB的RAM,并且需要能够同时处理多个人下载(可能最多20个人).我的第一个问题是我应该一次读取多大块.由于块大小,现在下载1.5GB文件非常慢.
关注2:最长执行时间
上传/下载此类大文件的另一个问题是最长执行时间.虽然我的内部网络上的一切都很快,但我应该为连接速度慢的用户做好准备.我将我的低端上传速率设置为1Mbps,上传大约需要35分钟.让我们慷慨,并说他们可以以两倍的速度下载,所以下载15分钟.
将max_excution_time设置为30分钟是否存在安全风险?是否会在我的服务器上杀死任何东西?我没有任何理由认为这是一个坏主意,但我的直觉只是尖叫我允许脚本运行那么久我会很愚蠢.有没有更好的方法来做我想做的事情?
我见过其他几个类似的问题,其中大多数建议使用像java或silverlight这样的东西.我想,如果有任何明智的方法,避免java.我目前正在使用swfupload和随附的jQuery插件.
我正在尝试编写一个应用程序,允许我的用户将文件上传到我的Google云端存储帐户.为了防止覆盖并在我身边做一些自定义处理和日志记录,我使用Node.js服务器作为上传的中间人.所以这个过程是:
我在第3步有点迷失,确切地说是如何将该文件发送给GCS. 这个问题提供了一些有用的见解,以及一个很好的例子,但我仍然感到困惑.
据我所知,我可以打开一个ReadStream临时上传文件并将其传递给该http.request()对象.我感到困惑的是如何在POST请求中表示管道数据是file变量.根据GCS API文档,需要有一个file变量,它需要是最后一个变量.
那么,如何为管道数据指定POST变量名?
如果您可以告诉我如何直接从用户的上传中管道它,而不是将其存储在临时文件中,则可以获得奖励积分
我正在尝试编写一些jquery,它会在对象模糊时调用函数.由于我的底层代码中的一些要求,我需要调用一个函数,如下所示:
$("object").blur(myFunction());
Run Code Online (Sandbox Code Playgroud)
而不是像这样:
$("object").blur(function() {
//do stuff
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用第一种方法绑定模糊事件不起作用.它实际上在页面加载时运行方法,然后从不绑定该函数.我在这做错了什么?
我已经设置了一个jsfiddle来演示我的问题,如果它可以帮助你想象.http://jsfiddle.net/WskKJ/
我有一个使用SSL在sub.domain.com上运行的Node.js服务器.它已经在桌面浏览器上运行了好几个月,但我注意到它在移动浏览器上不起作用.
我做了一些研究,很多人都认为我的证书链存在问题.我已经改变了我的代码看起来像但仍然没有运气.
这是我的代码:
var httpsOptions = {
ca: [fs.readFileSync("certrequest.csr")],
key: fs.readFileSync("privatekey.pem"),
cert: fs.readFileSync("certificate.pem")
};
var app = http.createServer(httpsOptions, function(req, res) {
log.cnsl.write("HTTP Request received from " + req.connection.remoteAddress);
//Do stuff
});
Run Code Online (Sandbox Code Playgroud)
我正在运行此命令来查看一些调试信息(我的服务器在端口5673上运行):
openssl s_client -connect sub.domain.com:5673 -showcerts | grep "^ "
Run Code Online (Sandbox Code Playgroud)
以下是该输出的重要部分
depth=0 O = *.domain.com, OU = Domain Control Validated, CN = *.domain.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = *.domain.com, OU = Domain Control Validated, CN = *.domain.com
verify error:num=27:certificate not trusted
verify …Run Code Online (Sandbox Code Playgroud)