Насколько плоха идея позволить пользователям загружать и хранить файлы с национальными символами в имени файла? - PullRequest
8 голосов
/ 02 декабря 2010

Наша CMS принимает файлы с национальными символами в именах и без проблем сохраняет их на сервере. Но насколько плох такой подход в перспективе? Например, возможно ли хранить файлы с именами файлов на иврите, арабском или на любом другом языке с нелатинским алфавитом? Есть ли стандартный установленный способ справиться с этим?

Ответы [ 6 ]

7 голосов
/ 02 декабря 2010

Стандартным способом было бы создать уникальные имена самостоятельно и сохранить исходное имя файла в другом месте.Как правило, даже если ваша базовая ОС и файловая система допускают произвольные символы Unicode в имени файла, вы не хотите, чтобы пользователи определяли имена файлов на вашем сервере.Это может создать определенные риски и привести к проблемам, например, вызванным слишком длинными именами или конфликтами файловой системы.Примерами сайтов, на которых это делается, могут быть Facebook, flickr и многие другие.

Для создания уникального имени файла рекомендуется использовать значения Guid.

4 голосов
/ 02 декабря 2010

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

Затем переименуйте имя файла, используя уникальный буквенно-цифровой идентификатор, сохраняя исходное расширение файла.

Если вы ожидаете много файлов, вам следует создать каталоги для группировки файлов. Использование года, месяца, дня, часа и минуты обычно достаточно для большинства. Например:

.../2010/12/02/10/28/1a2b3c4d5e.mp3

Да, у меня был опыт работы с огромными коллекциями mp3, которые известны тем, что названы на языке страны, где происходит песня, что может вызвать проблемы в нескольких местах.

2 голосов
/ 02 декабря 2010

Это нормально, если вы обнаруживаете кодировку, в которой он находится, из заголовков в запросе и используете согласованный кодировку (например, UTF-8) для внутреннего использования.

1 голос
/ 02 декабря 2010

На сервере Unix технически выполнимо и легко принять любой символ Unicode в имени файла, а затем преобразовать имена файлов в UTF-8 перед их сохранением. Однако могут быть ошибки в преобразовании (в используемом вами шаблонизаторе HTML или в веб-среде или в веб-браузере пользователя), поэтому некоторые пользователи могут жаловаться, что некоторые загруженные ими файлы исчезли. Основной причиной может быть неправильное преобразование имени файла. Если все символы в имени файла или нелатинские, и вы (как разработчик программного обеспечения) не говорите на этом иностранном языке, тогда удачи в выяснении того, что случилось с файлом.

0 голосов
/ 02 декабря 2010

Существует множество программ, в которых есть ошибки, связанные с такими именами файлов, особенно в Windows.

Udpate: Пример: я не смог использовать Android SDK (без создания нового пользователя), потому что у меня был é в моем имени пользователя.Я также столкнулся с подобной проблемой с компилятором Intel C ++.

Программное обеспечение обычно не проверяется должным образом с такими именами файлов.Windows API по-прежнему предлагает версии функций в кодировке «ANSI», и многие разработчики, похоже, не понимают его потенциальных проблем.Я также продолжаю сталкиваться с веб-страницами, которые портят мое имя.

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

0 голосов
/ 02 декабря 2010

Это отличная идея.Будучи венгром, я очень раздражен, когда мне не разрешают использовать такие символы, как áÉŰÖÜúÓÚŰÉÍí:)

...