Topic: Хранение файлов и изображений

Добрый день. Есть программа куда вносятся данные и прикрепляются файлы и изображения. База данных на MySQL на отдельном сервере. У файлов и изображений свойство LinkFile. На сервере храниться только ссылка на сам файл или изображение. Когда пользователь вносит новую информацию то он грузит файлы или изображения со своего пк и естественно линк прописывается с его локальной машины. Можно сделать так что бы при загрузке пользователями файлов и изображений, файл сам еще копировался в специальную директорию на сервере и линк прописывался на этот файл уже в директории которая на сервере а не в папке у пользователя? Файл на пк пользователя можно будет удалить так как его копия уже лежит в другом месте и с ней уже в дальнейшем будут работать. Читал тут на форуме что свойство CopyTo не работает если база на MySQL.

файл пользователя на его пк--> прикрепляет файл через программу, нажимает сохранить --->файл копируется в директорию на сервере--> в базе данных линк файла указывается директория на сервере. 

Заранее спасибо.

2 (edited by k245 2026-04-02 08:13:50)

Re: Хранение файлов и изображений

Если я правильно понимаю, то для хранения изображений используется сетевое файловое хранилище, а в базу данных записывается путь к файлу? Это правильно smile


Тогда всё просто: единообразно подключаете сетевой диск файлового хранилища у всех пользователей и решаете задачу чтения/записи файлов средствами ОС, не используя компонент TdbImageDatabase, а используя компонент TdbImage и его методы чтения/записи изображения. Используйте для хранения ссылки обычное текстовое поле.


Реализация примерно такая: TdbImage для просмотра и три кнопки TdbButton, по аналогии с теми, что есть у TdbImageDatabase
- Загрузить из файла ( TdbImage.Picture.LoadFromFile() ), выбранного пользователем
- Выгрузить  в файл( TdbImage.Picture.SaveToFile() ), указанный пользователем
- Очистить (TdbImage.Clear)
Для двух первых потребуются TOpenDialog и TSaveDialog.


Дополнительные методы, которые нужны при открытии формы редактирования и нажатии кнопки сохранения:


Чтение из базы = Загрузить из файла, который указан в поле БД
Запись в базу = Выгрузить в файл, который указан в поле БД


Я рекомендую не структурировать файловое хранилище подкаталогами, а сохранять в одну папку, в файл, имя которого состоит из названия таблицы + ID записи. Расширение оставлять оригинальное. Если нужно сохранять оригинальное имя файла, его можно записывать в БД в отдельное текстовое поле.


Преимущества:
- нет конфликтов имен файлов
- нет проблем, связанных с реструктуризацией каталогов файлового хранилища


Недостатки:
- недоступен ручной поиск в файловом хранилище по оригинальному названию файла.

Визуальное программирование: блог и телеграм-канал.