Intereting Posts
Как проверить, является ли запись mysql пустой в PhP? mysql_pconnect (): ошибка отправки 5 байтов с errno = 32 Разбитая труба Изменить файл конфигурации PHP из формы HTML Ошибка Codeigniter «Не удается подключиться к серверу базы данных с помощью предоставленных настроек» AngularJS: одновременный $ http get возвращает неверные данные в $ .each loop Анализ синтаксиса X509 Как обработать <div> как форму <input> Zend Framework формы, декораторы и проверки: должен ли я вернуться к простому HTML? Расширение PHP PDO не работает в IIS Проблемы с формой входа в систему с Jsoup PHP TCPDF ERROR: невозможно создать выходной файл, папка существует и имеет правильные разрешения WooCommerce Пустая корзина после оплаты с помощью API пользовательского шлюза Несколько загрузок файлов с помощью cURL Получить имя класса из расширенного класса Подсчитайте и ограничьте количество загруженных файлов (вход в файл HTML)

PHP скачать .jpg или .avi

У меня возникла проблема с загрузкой файлов .jpg и .avi с сервера с использованием PHP. У меня есть следующий код:

$fileName = "Koala.jpg"; $filePath = "./Koala.jpg"; if (!file_exists($filePath)){ echo "No file"; return; } $fp = fopen($filePath, "r"); $fileSize = filesize($filePath); header("Content-type: application/octet-stream"); header("Accept-Ranges: bytes"); header("Content-Length: $fileSize"); header("Content-Disposition: attachment;filename=".$fileName); $buffer = 1024; while(!feof($fp)){ $data = fread($fp, $fileSize); echo $data; } fclose($fp); 

Код загружает файл .txt успешно, и загруженный файл можно прочитать. Однако, когда дело доходит до .jpg, загруженный файл .jpg не может быть прочитан. Может ли кто-нибудь помочь? благодаря

Просто попробовал другой метод, и он отлично работает

 $file = 'Koala.jpg'; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; } 

Но просто задайтесь вопросом, почему причина приводит к отказу первого метода, хотя вместо этого используется fopen («xxx», «rb»). спасибо

Solutions Collecting From Web of "PHP скачать .jpg или .avi"

Попробуйте заменить приложение / октет-поток для изображения / jpeg.

С уважением

Я не эксперт по php (к сожалению), но я помню, что у меня была аналогичная проблема при использовании php на сервере Windows. Это было связано с открытием файла без бинарного флага (должно быть fopen($filePath, "rb"); в вашем примере). Если вы не установите этот флаг, ваши данные могут быть изменены, если вы прочитаете его из потока, который может сломать ваши файлы (и вы не заметите его на текстовых файлах).

См. http://www.php.net/manual/en/function.fopen.php для получения дополнительной информации о различных доступных режимах.

Попробуйте использовать это –

 <?php $filename = "MyImage.jpg"; $handle = fopen($filename, "rb"); $contents = fread($handle, filesize($filename)); fclose($handle); ?> 

Вместо следующего кода, который вы используете,

 $buffer = 1024; while(!feof($fp)){ $data = fread($fp, $fileSize); echo $data; } в $buffer = 1024; while(!feof($fp)){ $data = fread($fp, $fileSize); echo $data; } 

Просто используйте метод readfile

 readfile($filePath);