Хранение файлов на сервере

Как правильно организовать запись/чтение файла на сервер?
На форме есть поля:
Название
Рабочее место
Сборочная линия
и кнопка выбора файла

Пользователь заполняет форму, выбирает файл и жмет “отправить”

Как дальше поступать с файлом:

  1. сохранять под тем же именем на сервер?
  2. кодировать название
 function url_encode($string){
        return urlencode(utf8_encode($string));
    }
   
    function url_decode($string){
        return utf8_decode(urldecode($string));
    }
  1. переименовывать
  2. переименовывать / хранить оригинальное название в базе

Чтение с сервере планируется в виде:

  1. на странице список site.lcl/document/view/{ИдентификаторФайла}
  2. по клике на ссылку:
  • если файл pdf, doc - добавить колонтитулы с текущей датой, отдать файл пользователю;
  • другой тип - отдать файл пользователю.

Если имя не нужно ни для чего, то наверно проще сгенерировать, чтобы не париться с валидацией и уникальностью.

И если файлов много, то

Нужно чтобы когда файл отдался пользователю, после нажатия на ссылку, это файла имел название человекопонятное

“Человекопонятное” и “изначальное” это разные вещи.

В зависимости от задачи можно просто давать какое-нибудь понятное имя в запросе, который отдает.
Content-Disposition - HTTP | MDN

В том и вопрос был :wink:

такой вариант:

  • сохраняем файл в папку /upload/{сборочнаяЛинияID}/{рабочееМестоID}/{IDфайла} (IDФайла получим с базы после загрузки файла во временную папку upload())
  • для скачивания файла формируется ссылка - site.lcl/document/view/{сборочнаяЛинияID}/{рабочееМестоID}/{IDфайла}
  • пользователю отдается файл {IDфайла} с именем с поля Название

как поступать с разширением? сохранять {IDфайла}.ext или ext отдельно хранить в записи о файле в БД?

Если нужны будут выборки по типу (расширению) файла, то лучше отдельным полем хранить. Не забыть проконтролировать названия на предмет запрещенных символов в именах файлов.