PHP Загрузить и показать PDF-файл BLOB поврежден - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь создать на своей веб-странице функцию для загрузки файлов в базу данных MySQL, а затем для показа / предоставления пользователю возможности загрузить файл позже. Загрузка PDF-файла выглядит нормально, но при открытии загруженного файла Adobe сообщает, что файл поврежден. При попытке показать файл в браузере, он говорит, что не может открыть файл. Пожалуйста, помогите

Скрипт загрузки:

if(isset($_POST['submit'])){
    $name = $_FILES['myfile']['name'];
    $type = $_FILES['myfile']['type'];
    $data = file_get_contents($_FILES['myfile']['tmp_name']);
    $stmt = $pdo->prepare("INSERT INTO f_driver VALUES('', ?, 'Datablad', ?, ?, ?, NULL, ?)");
    $stmt->bindParam(1, $name);
    $stmt->bindParam(2, $type);
    $stmt->bindParam(3, $data);
    $stmt->bindParam(4, $pid);
    $stmt->bindParam(5, $uid);
    $stmt->execute();
}

Скрипт для скачивания / показа (вложение изменено на встроенное)

require_once("../include/pdo_connect.php");
$id = $_GET['id'];
$table = $_GET['table'];
$stat = $pdo->prepare("SELECT * FROM $table WHERE id = ?");
$stat->bindParam(1, $id);
$stat->execute();
$row = $stat->fetch();
$name = $row['name'];
$type = $row['mime'];
$content = $row['data'];
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $content;

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Я нашел решение своей проблемы. Казалось, что PDO имеет размер буфера по умолчанию 1MiB. Это было изменено с помощью $ pdo-> setAttribute (PDO :: MYSQL_ATTR_MAX_BUFFER_SIZE = 1024 *1024* 16); за 16 мб. Тогда все прошло идеально.

0 голосов
/ 28 июня 2018

Не могли бы вы предоставить образец структуры вашего стола? Скорее всего, тип поля data в вашей таблице не предусмотрен для больших наборов данных и обрезает данные после определенного количества байтов. Вы пробовали другой тип поля? Возможно LONGTEXT или BLOB?

...