Почему файлы PDF, хранящиеся в базе данных mysql, повреждены / повреждены при загрузке? - PullRequest
3 голосов
/ 15 марта 2012

Я создаю страницу, где пользователи могут загружать / скачивать pdf файлы, которые хранятся в базе данных mysql, проблема в том, что когда я скачиваю файл, он становится поврежденным / поврежденным

NP: данные сохраненного файлакак блоб в базе данных.

Ниже приведен мой код:

<code>        // Gather all required data
        $name = $dbLink->real_escape_string($_FILES['uploaded_file']['name']);
        $mime = $dbLink->real_escape_string($_FILES['uploaded_file']['type']);
        $data = $dbLink->real_escape_string(file_get_contents($_FILES           ['uploaded_file']['tmp_name']));
        $size = intval($_FILES['uploaded_file']['size']);

        // Create the SQL query
        $query = "
            INSERT INTO `file` (
                `name`, `mime`, `size`, `data`, `created`
            )
            VALUES (
                '{$name}', '{$mime}', {$size}, '{$data}', NOW()
            )";

        // Execute the query
        $result = $dbLink->query($query);

        // Check if it was successfull
        if($result) {
            echo 'Success! Your file was successfully added!';
        }
        else {
            echo 'Error! Failed to insert the file'
               . "<pre>{$dbLink->error}
";}} else {echo 'Ошибка при загрузке файла.'. 'Код ошибки: '. Intval ($ _ FILES [' uploaded_file '] [' error ']);} // Закрыть соединение mysql $ dbLink-> close ();} else {echo' Ошибка! Файл не был отправлен! ';} скачать код: // Получить информацию о файле $ query = "SELECT` mime`, `name`,` size`, `data` FROM` file` WHERE `id` = {$ id}"; $ result = $dbLink-> query ($ query); if ($ result) {// Убедитесь, что результат верен, если ($ result-> num_rows == 1) {// Получить строку $ row = mysqli_fetch_assoc ($ result); // Печать заголовков // header ('Content-Type: application / pdf'); header ("Content-Type: application / force-download"); header ("Pragma: public"); header ("Content-Description: File"Transfer "); заголовок("Content-Type:". $ Row ['mime']);заголовок ("Content-Length:". $ row ['size']);заголовок ("Content-Disposition: attachment; filename =". $ row ['name']);заголовок («Content-Transfer-Encoding: двоичный»);заголовок («Cache-Control: must-revalidate, post-check = 0, pre-check = 0»);// Печать данных @readfile ($ row ['data']);} else {echo 'Ошибка!Файл с таким идентификатором не существует. ';} // Освободить ресурсы mysqli @mysqli_free_result ($ result);} else {echo "Ошибка! Запрос не выполнен:
{$dbLink->error}
";} @mysqli_close ($ dbLink);}} else {echo 'Ошибка!ID не был передан. ';}

1 Ответ

2 голосов
/ 15 марта 2012

Не так. Mysqli не так. У вас всегда есть выбор, скажите своему учителю, что в этом подходе нет никакой ценности. Почему бы не сохранить JPG в базе данных MySQL? Потому что есть лучший способ - сохранить ссылку в базе данных, сохранить .jpg в Интернете. То же самое с PDF. Если вам нужно внимательно посмотреть, посмотрите, как веб-редакторы, такие как ckedit, хранят данные (еще один неправильный подход), а также посмотрите на dompdf code.google.com/p/dompdf/, чтобы понять, что нарушает формат pdf.

Почему mysqli плохая идея? MySql это то, что есть. mySql пытается сделать что-то еще, что лучше сделать другими методами, иначе mysql сделает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...