我一直在颠倒网络,以获得分块大文件上传为我的Symfony2应用程序工作。为了简化事情,我制作了一个测试程序,与其他应用程序分开。它做的唯一的事情就是试图测试如果PHP://输入可以接受我的大文件的上传与本文中介绍的方法:为什么php://输入拒绝我的大文件上传?
http://www.webiny.com/blog/2012/05/07/webiny-file-upload-with-html5-and-ajax-using-php-streams/
我的理解是,如果是在用户上载该大型视频文件2GB +,然后在服务器上需要2GB + RAM,文章中的方法将其削减到每个并发上传器4096位。 (我不确定我怎么会测试本地主机服务器上的RAM使用)
但是当我尝试上传大文件浏览器只是等待第二个和2个,然后职位1KB的录像档案。
我为php.ini设置设置了很高的值。
这里是PHP代码的相关部分:
public function lastoppAction(Request $request)
{
$videofilename = (string)$request->request->get("filnavn");
$inputHandler = fopen("php://input", "rb");
$fileHandler = fopen("videoer\\myfile.tmp", "wb") or die('fopen failed');;
while(true) {
$buffer = fgets($inputHandler, 4096);
if (strlen($buffer) == 0) {
fclose($inputHandler);
fclose($fileHandler);
break;
}
fwrite($fileHandler, $buffer) or die('fwrite failed');;
}
$url = $this->generateUrl('largefile_navngi', array('filnavn' => $videofilename));
return $this->redirect($url);
}
public function navngiAction(Request $request)
{
$filnavn = $request->query->get('filnavn');
$sti = $this->container->getParameter('kernel.root_dir');
$websti = preg_replace('/app/','web',$sti,1);
print_r("Filnavn: " . $filnavn);
rename($websti . "/videoer/myfile.tmp",$websti . "/videoer/" . $filnavn);
$url = $this->generateUrl('largefile_index');
return $this->redirect($url);
}
的原因重定向是为了重命名正确收到文件名可变。
Ajax代码是像上面但具有下列差别链接的文章中:
xhr.open( “POST”,网址,FALSE); 使用我自己的本地主机url。我也在这里尝试过。不同之处在于,如果我们在第三个参数中有错误,它可以与小文件一起工作。
使用async true时,它似乎只给出两个文件原来的myfile.tmp,我打开并重命名为0kb的文件。 “filename.mp4”。
奇怪的是,当AJAX代码运行:
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4)
{
if(xhr.status == 200)
{
//alert("success");// process success
alert("Filnavn: " + filnavn);
}else{
// process error
alert("Status: " + xhr.status);
}
}
};
状态变成500,即使像16 MB的小文件,而无需其他问题完全上传。
这里是树枝文件:
<h1>Test av å laste opp større filer</h1>
<form method="post" action="{{path('largefile_lastopp')}}">
<label>Fil: </label>
<input type="file" name="fil" id="video" /><br /><br />
<input type="hidden" name="filnavn" id="filnavn" />
<input type="hidden" name="mimetype" id="mimetype" />
<input onclick="upload('video',0)" type="submit" name="submit" />
</form>
::1 - - [10/Jun/2015:15:41:36 +0200] "POST /LargeFileUpload/web/app_dev.php/lastopp HTTP/1.1" 302 436 "http://localhost/LargeFileUpload/web/app_dev.php/" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
可能服务器配置为所需大小以下的MAX POST SIZE。 – mariobgr
我想你是在用文章中的另一种方式混合标准文件上传。看文章html。这是完全不同的 – venca
我有一个很大的MAX POST SIZE – Stian