Переименование загруженных файлов

Недавно я начал загружать PDF-файлы с записями академических презентаций (в частности, на эту тему о сезонном прогнозировании климата).

Используемая мной схема именования файлов выглядит так:

  • 0000-leadauthor-[etal-]title-title-title.pdf

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

Мой обходной путь заключается в изменении следующей настройки на значение 1 (по умолчанию стоит 48), удалении всех ссылок на файл в разметке и ожидании, пока произойдёт удаление файла:

  • Settings > Files > clean orphan uploads grace period hours

Я также пробовал установить этот параметр в 0, но это не сработало. В таком случае подсказку лучше изменить на: «Чтобы отключить льготный период, установите значение 0». Или, в зависимости от контекста: «Чтобы обеспечить почти мгновенный эффект, установите значение 0».

Я не могу точно сказать, как часто выполняется такая процедура обслуживания — предположительно, раз в час? Или, может быть, раз в день? Это тоже было бы полезно знать.

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

Ежечасно…

Не знаком с Ruby, но здесь тоже 0 означает 1. Возможно, в подсказке параметра тоже стоит написать: «Значение 0 интерпретируется как 1» или что-то подобное. Особенно учитывая, что в других случаях ноль часто имеет специальное значение «отключить». Спасибо, @neounix.

Я думаю, что вам нужно обновить запись загрузки в консоли Rails, если вы используете собственное хостинг. Сомневаюсь, что это можно сделать через API, но я не проверял.

Мы используем собственное размещение. Мне предложили доступ к shell-аккаунту, но я пока не предпринял никаких действий по этому поводу. Спасибо за подсказку.

Погодите. Я не совсем уверен, что вы пытаетесь сделать. Речь о том, чтобы изменить имя, которое видят пользователи в постах, где эти файлы загружены? Если так, то, возможно, вам стоит выполнить что-то вроде:

rake posts:remap["old-name.pdf","newname.pdf"]

Как описано в статье Заменить строку во всех постах. Думаю, что для ваших целей оригинальное имя файла в модели Upload не имеет особого значения.

Но вы можете изменить его вот так:

u=Upload.find_by(original_filename: 'mypretty-w9.pdf')
u.original_filename='better-name.pdf'
u.save

Я попытался пересобрать пост с этой загрузкой, но ничего не произошло.

РЕДАКТИРОВАНИЕ:

def rename_upload(old_name, new_name)
  u=Upload.find_by(original_filename: old_name)
  u.original_filename=new_name
  u.save
end

Если вы вставите этот код, то сможете выполнить:

rename_upload('name.pdf','better-name.pdf')

Это исправит ситуацию так, что при загрузке файлы будут получать более подходящее имя.

В прошлой жизни, когда я был академиком, у меня был свой особый способ именования PDF-файлов, который отличался от всех остальных; я почти уверен, что у моей жены тоже есть свой. Думаю, что даже когда вы приведёте имена файлов «как надо», никто не останется доволен. :wink:

Не то, что я пытался сделать. Строка leadauthor была частью имени файла. Ничего больше. Но когда я исправил имя файла (потому что моё понимание семейных именных традиций у испанских учёных крайне ограничено) и попытался загрузить переименованный файл, Discourse обнаружил, что в его манифесте уже есть идентичный файл, и переключился на оригинальное целевое имя и имя файла. Думаю, это можно считать особенностью? :roll_eyes: Только после того, как я удалил этот файл из базы данных сайта, я смог загрузить файл с исправленным именем. Я очень ценю вашу помощь и интерес, @pfaffman.

Где вы видите «filename»? Фактическое имя файла в файловой системе представляет собой случайную строку.

После тестирования в моем экземпляре я заметил, что можно изменить имя файла в ссылке [filename.pdf|attachment](upload://filehash.pdf). Хотя в посте отображается filename.pdf, при скачивании файл всё равно сохраняется с исходным именем. Похоже, это именно то, что он хочет: переименовать имя файла, которое используется при скачивании.

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

О. Понятно. Значит, три строки кода на Ruby on Rails делают то, что вам нужно. Это не меняет то, что вы видите в постах, но если вы кликнете на файл, он сохранится под именем “better-name.pdf”.

Спасибо всем, кто откликнулся.