我一直在顛倒網絡,以獲得分塊大文件上傳爲我的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