Проблема со скачиванием папки с именем больше некой длины.

Проблема со скачиванием папки с именем больше некой длины.

от Vladimir Yumashev -
Количество ответов: 8
Если у папки длина имени больше 200 байт (именно, что байт, см.ниже), то скачать ее в виде zip не получается. Выдается ошибка и совет обратиться к администратору. То есть сама папка живет и здравствует, ее можно открыть, из нее можно скачать файлы, но скачать ее целиком в виде zip-файла нельзя.

Почему байт: если будут только ASCII символы, то лимит будет именно 200 символов. Если будут русские буквы, то лимит уменьшается (с учетом того, что на русские символые в UTF8 задействовано два байта).

Завел баг в трекере: https://tracker.moodle.org/browse/MDL-60398
Почти две недели прошло: никакой реакции.

Это бага или фича?
Версия: 3.3.2+ (Build 20170915)
В ответ на Vladimir Yumashev

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Не ждите скорой реакции на официальном трекере. Проверьте наличие проблемы на 3.4, и добавьте ссылку на неё в заявке на трекере, это может сократить время, через которое к заявке кто-то подключится. Пока заявка никому не назначена и никто за ней не наблюдает, поскольку на категориях Course и Resource нет постоянных ответственных. Попробуйте добавить категорию Library, так как по сути проблема в библиотеке работы с файлами, а не в курсах или ресурсах.

Вообще, ограничение на длину полного пути к любому файлу должно быть около 250 байт, чтобы её могли нормально распаковать в Windows. Уверены, что длина полного пути к самому длинному имени файла внутри этой папки не превышает этот предел? Вы экспериментировали на пустой папке?

В ответ на Vladimir Yumashev

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vadim Tabunshchik -
Изображение пользователя Developers
Если у папки длина имени больше 200 байт

Приведите пример такого названия.

ЗЫ: нет никакого ограничения ни в Мудл, ни в ОСи на длину названия папки/файла в байтах, есть ограничение на количество символов, независимо от кодировки.

Поле `filename` в БД Мудл - varchar(255)

255 символов в названии папки не позволяют создать архив для скачивания, так как при входе в каталог с таким названием Мудля не видит ни название, ни файлы внутри:

002

Название каталога, позволившее создать и скачать архив:

БиблиографияАиАссылкиАнаАэлектронныеАресурсыАНадёжностьАэлектроэнергетическихАсистемАПоказатели
АрискаАиАпоказателиАнадёжностиААприменяемыеАзаАрубежомАИзучениеАустройстваАиАисследованиеАработы
АрегулятораАциклаАсваркиАФАСЦА403АУ4АБиблиографияБиблиограф

Файл внутри есть (БиблиографияАиАссылкиАнаАэлектронныеАресурсыАНадёжностьАэлектроэнергетическихАсистемАПоказателиАрискаАиАпоказателиАнадёжностиААприменяемыеАзаАрубежомАИзучениеАустройстваАиАисследованиеАработыАрегулятораАциклаАсваркиАФАСЦА403АУ4АБиблиографияБиблиогра.doc):

002

В Windows с такими названиями вы однозначно работать не сможете, эксплорер не увидит ни архив, ни папки, ни файлы, даже если их распаковать сторонним файловым менеджером (в названии файла 250 символов):

site

Отсюда вопрос: а нафига зачем использовать такие названия?

Проверялось всё на Moodle 3.3.2+ (Build: 20171021)

В ответ на Vadim Tabunshchik

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vladimir Yumashev -
Пожалуй моя ошибка, что не указал, что речь про ресурс "Папка" в курсе, а не папку в файловом менеджере.

Вот пример ASCII текста (с пробелами), который еще скачивается:
qqqqqqqqq wwwwwwwww eeeeeeeee rrrrrrrrr ttttttttttqqqqqqqqq wwwwwwwww eeeeeeeee rrrrrrrrr ttttttttttqqqqqqqqq wwwwwwwww eeeeeeeee rrrrrrrrr ttttttttttqqqqqqqqq wwwwwwwww eeeeeeeee rrrrrrrrr 012345678

Ровно 199 символов. Плюс один символ и уже не скачивается.

Пример русского текста (99 символов):
ййййййййййццццццццццууууууууууккккккккккееееееееееййййййййййццццццццццууууууууууккккккккккеееееееее

В конец еще можно добавить один ASCII символ, но не более того.

То есть это реально выглядит как лимит 199 байт и завершающий \0

В-общем, отредактирую созданную багу, еще поточнее сформулирую.

В ответ на Vladimir Yumashev

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vadim Tabunshchik -
Изображение пользователя Developers
речь про ресурс "Папка" в курсе

Так это ж 2 большие разницы, как говорят в известном городе улыбаюсь

При создании архива для скачивания (преварительно хранится в localcache) к его названию ещё добавляется дата и хеш файла, т. е. ещё больше символов будет в названии

А смысл в создании тикета? Как это побороть, если ограничения кодировки такие?

В ответ на Vadim Tabunshchik

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vladimir Yumashev -

Ну да, я включил максимальный уровенть дебага и посмотрел на ошибки. Там в начале хэш и в конце дата + .zip. В сумме как раз набирается что-то около 255.

Меня просто удивило то, что в мире уже-давно-сплошного utf8 мы имеем байтовые, а не символьные, лимиты. То есть на лимит 200 русских символов я бы даже согласился бы. И даже, наверное, не узнал про это. улыбаюсь  Но если это фича, то пусть пишут в доках, если бага, то наверное стОит исправить.

Ну и мне кажется, что если уж мы заботимся о пользователе, то он не совсем не соображает, и логика должна быть такая: берем длиннющее имя ресурса, обрезаем до скольки нам нужно, прикручиваем что нам нужно и предлагаем пользователю. А пользователь, если хочет, пусть сам меняет имя при скачивании и сохранении.

На тикет вроде среагировали. Посмотрим, что дальше.

PS. А что касается вообще длинных названий - это требования госзаказчика, чтобы все курсы и темы в курсах назывались и именно как в контракте утверждено. Вы еще не видели наши названия тем и курсов: у меня выпадающий список категорий (например, в свойствах курса) занимает два в ширину два экрана 1920 точек. удивляюсь


В ответ на Vladimir Yumashev

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vadim Tabunshchik -
Изображение пользователя Developers

Общее ограничение на длину имени файла в *nix 255 байт (именно байт, а не символов) при этом в кодировке UTF-8 русские символы  занимают по 2 байта, т.е. для русских названий файлов в UTF-8 будет ограничение в 127 символов на имя файла.

Поэтому ваши 99+хеш+дата дают искомые 127 символов.

чтобы все курсы и темы в курсах назывались и именно как в контракте утверждено. Вы еще не видели наши названия тем и курсов: у меня выпадающий список категорий (например, в свойствах курса) занимает два в ширину два экрана 1920 точек.

Тут вы можете писать сколько угодно, пока не заполните всю ячейку в таблице БД ,а вот с ресурсом папка Мудл работает как с файлом/каталогом в ОСи - архивирует, копирует во временный каталог и т. д. Поэтому тут и срабатывают эти ограничения на длину имени каталога/файла. Даже если в Мудл позволить работать с ОЧЕНЬ длинными именами, будут проблемы у пользователей, скачавших такой архив (см. сообщение выше)

берем длиннющее имя ресурса, обрезаем до скольки нам нужно

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

В случае ресурса каталог я вижу решение в виде размещения пояснения перед ссылкой на каталог. В пояснении пишите, что душе угодно, имя папки (и файлов в ней) укорачивайте.

В ответ на Vadim Tabunshchik

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vladimir Yumashev -

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

Посмотрим, что дальше порешают.

Последний абзац: явный костыль временный workaround. Думается мне, либо лимит на длину имени ресурса должен быть документирован, либо функция, формирующая имя zip-файла должна сама разруливать длинное нечто, которое ей приходит.

Ну а пока скажу своим, чтобы сокращали название ресурса типа "папка".

В ответ на Vladimir Yumashev

Re: Проблема со скачиванием папки с именем больше некой длины.

от Vadim Tabunshchik -
Изображение пользователя Developers
Посмотрим, что дальше порешают.

Согласен, лишним не будет. Хотя всем авторам курсов в своем ВУЗе настоятельно рекомендую нигде не использовать такие длиннющие названия файлов/папок, и кириллицу,кстати, тоже улыбаюсь

Последний абзац: явный костыль временный workaround.
Ну а пока скажу своим, чтобы сокращали название ресурса типа "папка".

Как временное решение пойдет. Кроме того (пришла мысля опосля), не нужно использовать для этого пояснение, достаточно в «Описание» для ресурса ввести полное название.