上传文件大小问题(HTML5,Javascript,PHP)

时间:2014-01-23 15:28:09

标签: javascript php html5 file-upload

我在互联网上的教程如何使用HTML5,Javascript和PHP创建上传表单。当我尝试上传时,我上传小文件就好了,但如果我输入更大的内容就会给我一个错误。我想我的第一个错误是因为IIS没有配置为上传大文件所以我修复了,从那时起,每当我尝试从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左右文件的方法。

2 个答案:

答案 0 :(得分:3)

要上传大文件,而不是升级服务器中的上传限制,您需要使用像plupload这样允许请求分块的库进行块上传。

请求分块将允许服务器要求客户端浏览器将大文件作为小块发送。这是有效的,并且在大文件的情况下减少了服务器负载。此外,它还允许文件上传恢复,这是大文件上传时非常需要的。

相反,如果您增加post_max_size和upload_max_filesize,请准备好服务器融化!

答案 1 :(得分:3)

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

您还需要更改memory_limit,以便它是&gt; = post_max_size以及max_execution_time

可以使用memory_limit

在脚本中设置

max_execution_timeini_set

注意:这可能不是最好的答案,如果这不只是你将使用的家庭项目(如果它为什么不只是设置一个FTP服务器而不是使用PHP)。但是,如果你有多个用户,我会选择@SrijithVijayamohan提供的答案