AleksandrH
(AleksandrH.)
19.Февраль.2021 11:02:04
#1
Как правильно организовать запись/чтение файла на сервер?
На форме есть поля:
Название
Рабочее место
Сборочная линия
и кнопка выбора файла
Пользователь заполняет форму, выбирает файл и жмет “отправить”
Как дальше поступать с файлом:
сохранять под тем же именем на сервер?
кодировать название
function url_encode($string){
return urlencode(utf8_encode($string));
}
function url_decode($string){
return utf8_decode(urldecode($string));
}
переименовывать
переименовывать / хранить оригинальное название в базе
Чтение с сервере планируется в виде:
на странице список site.lcl/document/view/{ИдентификаторФайла}
по клике на ссылку:
если файл pdf, doc - добавить колонтитулы с текущей датой, отдать файл пользователю;
другой тип - отдать файл пользователю.
AlexP
(Alex P.)
19.Февраль.2021 11:07:20
#2
Если имя не нужно ни для чего, то наверно проще сгенерировать, чтобы не париться с валидацией и уникальностью.
И если файлов много, то
Много файлов в одной папке лучше не хранить, могут быть проблемы с производительностью.
Простой популярный способ решить это: разбивать хэш на несколько частей и использовать первые части для имен папок.
То есть будет что-то типа:
ab/cd/qwe.jpg
ab/df/asd.png
...
AleksandrH
(AleksandrH.)
19.Февраль.2021 11:11:11
#3
Нужно чтобы когда файл отдался пользователю, после нажатия на ссылку, это файла имел название человекопонятное
AlexP
(Alex P.)
19.Февраль.2021 11:28:47
#4
“Человекопонятное” и “изначальное” это разные вещи.
В зависимости от задачи можно просто давать какое-нибудь понятное имя в запросе, который отдает.
Content-Disposition - HTTP | MDN
AleksandrH
(AleksandrH.)
19.Февраль.2021 11:48:44
#5
В том и вопрос был
такой вариант:
сохраняем файл в папку /upload/{сборочнаяЛинияID}/{рабочееМестоID}/{IDфайла}
(IDФайла получим с базы после загрузки файла во временную папку upload()
)
для скачивания файла формируется ссылка - site.lcl/document/view/{сборочнаяЛинияID}/{рабочееМестоID}/{IDфайла}
пользователю отдается файл {IDфайла}
с именем с поля Название
как поступать с разширением? сохранять {IDфайла}.ext
или ext
отдельно хранить в записи о файле в БД?
Аватар
19.Февраль.2021 12:03:35
#6
Если нужны будут выборки по типу (расширению) файла, то лучше отдельным полем хранить. Не забыть проконтролировать названия на предмет запрещенных символов в именах файлов.