Как сохранить ссылку на файл PDF в MYSQL для извлечения в php

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

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

<?php 
     $file = 'BinarySearch.pdf';
     $filename = 'BinarySearch.pdf';
     header('Content-type: application/pdf');
     header('Content-Disposition: inline; filename = "' .$filename . '"');
     header('Content-Transfer-Encoding: binary');
     header('Accept-Ranges: bytes');
     @readfile($file);
?>

Приведенный выше код открывает только файл, непосредственно хранящийся на сервере. Я не уверен, как сохранить путь в MySQL. Затем на моей веб-странице я хочу нажать кнопку, чтобы получить файл. (У меня есть несколько файлов, которые я хочу сохранить.) Заранее большое спасибо, но я вообще не могу найти, как это сделать, и это является неотъемлемой частью моего проекта.


person Naive Learner    schedule 14.07.2019    source источник
comment
Ваш код не имеет отношения к вашему вопросу. Если вы сохраняете путь к файлу в столбце БД, покажите нам этот код.   -  person Dharman    schedule 14.07.2019
comment
Привет, спасибо, что заглянули! Проблема в том, что я пробовал много разных битов в Интернете, и теперь у меня нет кода, который я мог бы показать. Я знаю только то, чего я хочу достичь, и действительно борюсь с тем, как это сделать. Например, как сохранить ссылку на файл, а затем как ее получить - я нигде не могу найти в Интернете, как это сделать!   -  person Naive Learner    schedule 14.07.2019
comment
Ссылка на файл — это просто путь к вашему файлу. Вы сохраняете его как любую другую текстовую строку в БД. См. этот учебник по PDO в PHP: phpdelusions.net/pdo#dml   -  person Dharman    schedule 14.07.2019


Ответы (1)


Хотя вопрос не очень ясен, я попытаюсь ответить на него с некоторыми предположениями.

Я настоятельно не рекомендую хранить файл в виде строки в базе данных, как вы узнали.

У вас есть пара вариантов -

Используйте облачного провайдера, например Amazon S3, для отправки файла PDF в корзину, которая возвращает URL-адрес, ссылающийся на этот файл. Затем вы сохраняете этот URL-адрес в своей таблице в качестве ссылки, поскольку API вернет ссылку на загруженный файл. Когда вам нужно отобразить файл по запросу, просто найдите файл по ссылке в своей базе данных и отобразите его, как вы это делаете сейчас. Это потребует дополнительной работы, так как вам нужно настроить учетную запись облачного провайдера, подготовить корзину (хранилище) и добавить SDK в свой проект для связи с механизмом хранения.

Другой подход заключается в том, что вы назначаете папку на своем веб-хостинге, доступную через URL-адрес вашего сайта. Например: https://yourdomain.com/files/9d6fdb34-f92f-4078-9ab3-e5ada4522f2e.pdf

Файл (9d6fdb34-f92f-4078-9ab3-e5ada4522f2e.pdf) физически хранится в локальной папке вашего облачного хоста, которая может быть где угодно, например /var/files, но ваш веб-сервер указывает на этот каталог, когда пользователь вводит https://yourdomain.com/files/ и ссылка на этот файл может храниться в MySQL вместе с другими метаданными, например, для вашего кейс -

file_guid :  9d6fdb34-f92f-4078-9ab3-e5ada4522f2e
file_name : BinarySearch
file_extension: pdf
user_id : 123 (if applicable)

В пользовательском интерфейсе ваши пользователи видят (BinarySearch.pdf) текст, который ссылается на https://yourdomain.com/files/9d6fdb34-f92f-4078-9ab3-e5ada4522f2e.pdf

Когда вы сохраняете файл в /var/files/, если ваши пользователи загружают файлы, всегда переписывайте имя файла как уникальный uuid, но сохраняйте имя файла, которое они загрузили, в базу данных, как я указал выше.

Надеюсь, это поможет.

Удачи.

person na-98    schedule 14.07.2019
comment
Мне очень жаль, что вопрос не был ясен - я действительно новичок в программировании, поэтому не могу понять мои слова. НО ОГРОМНОЕ спасибо за ответ, несмотря ни на что, поэтому я использовал второй подход, который вы упомянули, и он сработал! Он делает именно то, что мне было нужно! Я сохранил путь к файлу 192.167.90.2/SupportTools/BinarySearch.pdf в mysql, а затем использовал SQL-запрос для получения пути к файлу и создания кликабельной ссылки для просмотра файла PDF! Огромная помощь, большое спасибо - действительно пытался буквально с 7 утра!! - person Naive Learner; 14.07.2019
comment
@NaiveLearner круто! Очень рад слышать, что это сработало для вас. Я также впечатлен вашей способностью быстро понять и внедрить решение, несмотря на то, что вы новичок в программировании. Хорошо сделано. Одна небольшая деталь, я настоятельно рекомендую вам не хранить полную ссылку на файл в mysql. Вместо 192.167.90.2/SupportTools/BinarySearch.pdf просто сохраните /SupportTools/BinarySearch.pdf Я говорю это, потому что вы можете сменить компьютеры в будущем или вы в настоящее время находитесь в разработке, и что 192.167.90.2 может измениться на что-то другое в производстве. - person na-98; 14.07.2019
comment
Да, это имеет смысл - я изменил путь к файлу, как вы упомянули. Спасибо вам большое, я действительно благодарен! - person Naive Learner; 14.07.2019