Fine-Uploader PHP Server Side MergePhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Fine-Uploader PHP Server Side Merge

Сообщение Anonymous »


Я экспериментирую с Fine Uploader. Меня действительно интересуют функции фрагментации и возобновления, но я испытываю трудности с объединением файлов на стороне сервера;

Я обнаружил, что мне нужно разрешить пустое расширение файла на стороне сервера, чтобы разрешить загрузку фрагментов, иначе загрузка завершится неудачно с неизвестным типом файла. Он отлично загружает фрагменты с такими именами файлов, как «blob» и «blob63» (без расширения файла), однако не объединяет их обратно по завершении загрузки.

Будем благодарны за любую помощь или подсказки.

$('#edit-file-uploader').fineUploader({ запрос: { конечная точка: 'upload.php' }, несколько: ложь, Проверка:{ допущенные расширения: ['stl', 'obj', '3ds', 'zpr', 'zip'], sizeLimit: 104857600 // 100 МБ * 1024 (КБ) * 1024 (байт) }, текст: { uploadButton: 'Выбрать файл' }, автозагрузка: ложь, дробление: { включено: правда }, обратные вызовы: { onComplete: функция (id, имя_файла, ответJSON) { если (responseJSON.success) { /** здесь какой-то код **?? } } }); А это серверный скрипт (PHP):
// список допустимых расширений, например. массив("stl", "xml", "bmp") $allowedExtensions = array("stl", ""); // максимальный размер файла в байтах $sizeLimit = ноль; $uploader = новый qqFileUploader($allowedExtensions, $sizeLimit); // Вызов handleUpload() с именем папки относительно PHP getcwd() $result = $uploader->handleUpload('uploads/'); // для передачи данных через iframe вам нужно будет закодировать все html-теги echo htmlspecialchars(json_encode($result), ENT_NOQUOTES); /******************************************/ /** * Обработка загрузки файлов через XMLHttpRequest. */ класс qqUploadedFileXhr { /** * Сохраните файл по указанному пути. * @return boolean TRUE в случае успеха */ общедоступная функция save($path) { $input = fopen("php://input", "r"); $temp = tmpfile(); $realSize =stream_copy_to_stream($input, $temp); fclose($вход); if ($realSize != $this->getSize()){ вернуть ложь; } $target = fopen($path, "w"); fseek($temp, 0, SEEK_SET); stream_copy_to_stream($temp, $target); fclose($цель); вернуть истину; } /** * Получить исходное имя файла * @return string имя файла */ публичная функция getName() { вернуть $_GET['qqfile']; } /** * Получить размер файла * @return целое число — размер файла в байтах */ публичная функция getSize() { if (isset($_SERVER["CONTENT_LENGTH"])){ return (int)$_SERVER["CONTENT_LENGTH"]; } еще { throw new Exception('Получение длины контента не поддерживается.'); } } } /** * Обработка загрузки файлов через обычную форму (используется массив $_FILES). */ класс qqUploadedFileForm { /** * Сохраните файл по указанному пути. * @return boolean TRUE в случае успеха */ общедоступная функция save($path) { return move_uploaded_file($_FILES['qqfile']['tmp_name'], $path); } /** * Получить исходное имя файла * @return string имя файла */ публичная функция getName() { вернуть $_FILES['qqfile']['имя']; } /** * Получить размер файла * @return целое число — размер файла в байтах */ публичная функция getSize() { вернуть $_FILES['qqfile']['размер']; } } /** * Класс, который инкапсулирует внутренние механизмы загрузки файлов. */ класс qqFileUploader { частные $allowedExtensions; частный $sizeLimit; личный $файл; личное $uploadName; /** * массив @param $allowedExtensions; по умолчанию пустой массив * @param int $sizeLimit; по умолчанию используется настройка upload_max_filesize сервера. */ функция __construct (массив $allowedExtensions = null, $sizeLimit = null){ если ($allowedExtensions===null) { $allowedExtensions = массив(); } если ($ sizeLimit === ноль) { $sizeLimit = $this->toBytes(ini_get('upload_max_filesize')); } $allowedExtensions = array_map("strtolower", $allowedExtensions); $this->allowedExtensions = $allowedExtensions; $this->sizeLimit = $sizeLimit; $this->checkServerSettings(); if(!isset($_SERVER['CONTENT_TYPE'])) { $this->file = false; } else if (strpos(strtolower($_SERVER['CONTENT_TYPE']), 'multipart/') === 0) { $this->file = новый qqUploadedFileForm(); } еще { $this->file = новый qqUploadedFileXhr(); } } /** * Получить имя загруженного файла * @return строка */ публичная функция getUploadName(){ if( isset($this->uploadName) ) вернуть $this->uploadName; } /** * Получить исходное имя файла * @return string имя файла */ публичная функция getName(){ если ($this->файл) вернуть $this->file->getName(); } /** * Внутренняя функция, которая проверяет, соответствуют ли размеры сервера * максимальный размер объекта для загрузки */ частная функция checkServerSettings(){ $postSize = $this->toBytes(ini_get('post_max_size')); $uploadSize = $this->toBytes(ini_get('upload_max_filesize')); if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){ $size = max(1, $this->sizeLimit / 1024 / 1024) . 'М'; die(json_encode(array('error'=>'увеличьте post_max_size и upload_max_filesize до ' . $размер))); } } /** * Преобразование заданного размера из единиц в байты * @param строка $str */ частная функция toBytes($str){ $val = обрезка ($str); $last = strtolower($str[strlen($str)-1]); переключатель ($ последний) { случай 'g': $val *= 1024; случай 'м': $val *= 1024; случай 'k': $val *= 1024; } вернуть $вал; } /** * Обработка загруженного файла * @param строка $uploadDirectory * @param string $replaceOldFile=true * @returns array('success'=>true) или array('error'=>'сообщение об ошибке') */ функция handleUpload($uploadDirectory, $replaceOldFile = FALSE){ если (!is_writable($uploadDirectory)){ return array('error' => "Ошибка сервера. Каталог загрузки недоступен для записи."); } если (!$this->файл){ return array('error' => 'Ни один файл не был загружен.'); } $size = $this->file->getSize(); если ($размер == 0) { return array('error' => 'Файл пуст'); } if ($size > $this->sizeLimit) { return array('error' => 'Файл слишком большой'); } $pathinfo = pathinfo($this->file->getName()); $filename = $pathinfo['filename']; //$filename = md5(uniqid()); $ext = @$pathinfo['расширение']; // скрываем уведомления, если расширение пусто if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){ $these = implode(', ', $this->allowedExtensions); return array('error' => 'Файл имеет недопустимое расширение, оно должно быть одним из '. $these . '.'); } $ext = ($ext == '') ? $ext : '.' . $доб.; если(!$replaceOldFile){ /// не перезаписываем предыдущие загруженные файлы while (file_exists ($uploadDirectory. DIRECTORY_SEPARATOR. $filename. $ext)) { $filename .= rand(10, 99); } } $this->uploadName = $filename . $доб.; if ($this->file->save($uploadDirectory. DIRECTORY_SEPARATOR. $filename. $ext)){ вернуть массив('успех'=>истина); } еще { return array('error'=> 'Не удалось сохранить загруженный файл.' . «Загрузка была отменена или произошла ошибка сервера»); } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»