2014-01-23 2 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"; 
} 
?> 

Что является лучшим способом для обработки загрузки больших файлы? Я ищу способ загрузки файлов размером около 2 ГБ.

ответ

3

Чтобы загрузить большие файлы, вместо того, чтобы увеличивать лимит загрузки на сервере, вам необходимо использовать загрузку chunk с библиотекой, например plupload, которая разрешает обработку запросов.

Запрос chunking позволит серверу попросить клиентский браузер отправить большой файл в виде небольших фрагментов. Это эффективно, и загрузка сервера уменьшается в случае больших файлов. Кроме того, он также позволяет загружать файл , загружая резюме, что очень необходимо в случае большой загрузки файлов.

Вместо этого, если вы продолжаете увеличивать ваши post_max_size и upload_max_filesize, подготовьтесь к серверу, таяйте!

+0

Просто чтобы вы знали, что это не я, который проголосовал за ваш ответ. Я никогда не говорил, что мой ответ был лучшим, но если это всего лишь простой домашний проект для OP, чем прохождение дополнительной работы с использованием plupload, возможно, это не то, что OP хочет сделать, и если только он/она будет использовать его, нет ничего плохого в простом изменении пределов размера загрузки. Ваш путь может быть правильным, но теперь OP имеет пару опций и может выбрать лучший для данной ситуации. – elitechief21

3

Вам необходимо увеличить post_max_size (по умолчанию 8M) и upload_max_filesize (по умолчанию 2M) в вашем файле php.ini.

Вам также необходимо изменить memory_limit, а так, что> = post_max_size, а также max_execution_time

memory_limit и max_execution_time могут быть установлены в самом сценарии с использованием ini_set

Примечание: это, вероятно, не лучший ответ, если это не просто домашний проект, который вы только будете использовать (и если это почему бы просто не настроить ftp-сервер вместо использования php). Хотя, если у вас есть несколько пользователей, я бы пошел с ответом, предоставленным @SrijithVijayamohan

+0

Вопрос задает большой размер файла до 2 ГБ. Уменьшение размера загрузки сервера - неправильный способ сделать это. –

+0

У вас обоих есть действительные баллы. Я выбрал ответ Шриджита, потому что он предложил эффективность. Это рабочий проект, и я тоже искал эффективность, а не только для того, чтобы выполнить работу. Это отличный ответ. Это помогло с одним из других пользователей, которых я пробовал. Спасибо. – user2227904

Смежные вопросы