2014-01-23 45 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