2014-01-23 43 views
0

我在互聯網上關注瞭如何使用HTML5,Javascript和PHP創建上傳表單。當我嘗試上傳時,我上傳小文件很好,但是如果我輸入更大的文件,它會給我一個錯誤。我想我的第一個錯誤是因爲IIS沒有被配置爲上傳大文件,所以我解決了這個問題,從那時起,每當我嘗試從PHP獲取文件時,我都沒有收到任何東西。我得到空的參數。下面是我的一些代碼片段:上傳文件大小問題(HTML5,Javascript,PHP)

HTML:

<form id="upload_form" enctype="multipart/form-data" method="post"> 
    <input type="file" name="file1" id="file1"><br> 
    <input type="button" value="Upload File" onclick="uploadFile()"> 
    <progress id="progressBar" value="0" max="100" style="width:300px;"></progress> 
    <h3 id="status"></h3> 
    <p id="loaded_n_total"></p> 
</form> 

的JavaScript:

function uploadFile(){ 
    var file = _("file1").files[0]; 
    var formdata = new FormData(); 
    formdata.append("file1", file); 
    var ajax = new XMLHttpRequest(); 
    ajax.upload.addEventListener("progress", progressHandler, false); 
    ajax.addEventListener("load", completeHandler, false); 
    ajax.addEventListener("error", errorHandler, false); 
    ajax.addEventListener("abort", abortHandler, false); 
    ajax.open("POST", "file_upload_parser.php"); 
    ajax.send(formdata); 
} 

PHP:

<?php 
$fileName = $_FILES["file1"]["name"]; 
$fileTmpLoc = $_FILES["file1"]["tmp_name"]; 
$fileType = $_FILES["file1"]["type"]; 
$fileSize = $_FILES["file1"]["size"]; 
$fileErrorMsg = $_FILES["file1"]["error"]; 
if (!$fileTmpLoc) { 
    echo "ERROR: Please browse for a file before clicking the upload button."; 
    exit(); 
} 
if(move_uploaded_file($fileTmpLoc, "savefiles/$fileName")){ 
    echo "$fileName upload is complete"; 
} else { 
    echo "move_uploaded_file function failed"; 
} 
?> 

什麼是處理大上載的最好方式文件?我正在尋找一種方式來上傳2GB左右的文件。

回答

3

要上傳大文件,而不是在服務器上升大上傳限制,您需要使用允許請求分塊的plupload等庫的庫上載。

請求分塊將允許服務器請求客戶端瀏覽器以小塊的形式發送大文件。這是有效的,並且在大文件的情況下減少服務器負載。此外,它還允許文件上傳恢復這是大文件上傳的情況下非常需要。

相反,如果你去增加post_max_size和upload_max_filesize,準備一個服務器融化!

+0

只是讓你知道這不是我投票的答案。我從來沒有說過我的回答是最好的,但如果這只是OP的一個簡單的家庭項目,而不是使用plupload進行額外的工作,那麼OP可能不會做什麼,只要他/她將會使用它而不是簡單地更改上傳大小限制是沒有問題的。你的方式可能是正確的方式,但現在OP有幾個選項,並可以爲給定的情況選擇最好的一個。 – elitechief21

3

您需要在php.ini文件中增加post_max_size(默認爲8M)和upload_max_filesize(默認爲2M)。

您還需要改變memory_limit以及使其> = post_max_size以及max_execution_time

memory_limitmax_execution_time可以使用ini_set

注意腳本本身進行設置:這可能是不是最好的答案,如果這不只是家庭項目,只有你會使用(以及爲什麼不只是建立一個FTP服務器,而不是使用PHP)。雖然,如果你有多個用戶,我會去@SrijithVijayamohan提供的答案

+0

這個問題指定了一個高達2GB的大文件大小。升級服務器上傳大小是做錯的一種方法。 –

+0

你們倆都有有效的積分。我選擇了Srijith的答案,因爲它提供了效率。這是一個工作項目,我也在尋找效率,而不僅僅是爲了完成工作。這也是一個很好的答案。它幫助了我嘗試過的其他上傳者之一。謝謝。 – user2227904