Итак, как сказано в комментариях. Справочный материал приведен ниже примеров кода. Хитрость заключается в том, чтобы разрезать файл на куски, размер которых меньше лимита загрузки. Этот метод может быть расширен до такой степени, что когда загрузка файла прерывается, вы можете продолжить последнюю известную часть. :-)
Базовый класс JavaScript, облегчающий загрузку файла, определяет фрагменты для отправки на сервер PHP.
function fileUploader() {
// Called when the file is selected
this.onFileSelected = function() {
// Read file input (input type="file")
this.file = this.fileInput.files[0];
this.file_size = this.file.size;
this.chunk_size = (1024 * 1000);
this.range_start = 0;
this.range_end = this.chunk_size;
this.slice_method = 'slice';
this.request = new XMLHttpRequest();
// Start uploading
this.upload();
};
this.upload = function()
{
var self = this,
chunk;
// Last part reached
if (this.range_end > this.file_size) {
this.range_end = this.file_size;
}
// Chunk the file using the slice method
chunk = this.file[this.slice_method](this.range_start, this.range_end);
// Open a XMLHttpRequest
var endpoint = "/url/to/php/server/for/processing";
this.request.open('PUT', (endpoint));
this.request.overrideMimeType('application/octet-stream');
this.request.send(chunk);
// Make sure we do it synchronously to prevent data corruption
this.request.onreadystatechange = function()
{
if (self.request.readyState == XMLHttpRequest.DONE && self.request.status == 200) {
self.onChunkComplete();
}
}
};
this.onChunkComplete = function()
{
if (this.range_end === this.file_size)
{
// We are done, stop uploading
return;
}
this.range_start = this.range_end;
this.range_end = this.range_start + this.chunk_size;
this.upload();
};
}
И для бита PHP:
...
$out = fopen("{$filePath}.partial", "a+");
fwrite($out, file_get_contents("php://input"));
fclose($out);
...
Здесь большое предупреждение: обязательно правильно проверьте и примите меры безопасности, чтобы обеспечить безопасность функции загрузки ваших клиентов. Вы записываете необработанный ввод PHP в файл.
Когда загрузка завершена, вы можете переименовать файл в исходное имя, включая правильное расширение.
Справочный материал:
http://creativejs.com/tutorials/advanced-uploading-techniques-part-1/index.html
https://secure.php.net/manual/en/wrappers.php.php
В двух словах... это разбить файл на небольшие фрагменты с помощью процессора, загрузить файлы с помощью обычных методов (как вы обычно загружаете файл), добавить входные данные во временный файл. Некоторые ловушки, с которыми я столкнулся, заключались в отправке дополнительных параметров и тому подобного в конечную точку, избегайте их, поскольку они добавляются к файлу, и это повредит ваш файл.
person
Edwin
schedule
30.08.2017