Carrierwave: используйте пробелы вместо подчеркивания - PullRequest
0 голосов
/ 03 февраля 2020

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

some file test -> some_file_test

Я хотел бы сохранить пробелы. Может кто-нибудь сказать мне, как?

Я пытался:

  def filename
    original_filename
  end

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Вы можете переопределить очистить регулярное выражение , добавив пробел:

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+\ ]/

Как вы видите, это регулярное выражение используется в sanitize методе , который заменяет запрещенные символы на подчеркивание .

Из документации CarrierWave :

Имена файлов и символы Юникода

Еще одна проблема безопасности, о которой вам следует позаботиться имена файлов (см. Ruby Руководство по безопасности на Rails ). По умолчанию CarrierWave предоставляет только буквы Engli sh, цифры арабского c и некоторые символы в виде белых символов в имени файла. Если вы хотите поддерживать локальные сценарии (буквы кириллицы c, буквы с диакритическими знаками и т. Д.), Вам необходимо переопределить метод sanitize_regexp. Он должен возвращать регулярное выражение, которое будет соответствовать всем не разрешенным символам.

CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/

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

0 голосов
/ 03 февраля 2020

Попробуйте:

original_filename.gsub("_", " ")

ОБНОВЛЕНИЕ (возможное решение):

  • Замените подчеркивание символом или строкой (например, "xyxyxyxyxyxyxyxyz"), которую вы не ожидают в именах файлов перед передачей их в carrierwave, т. е.
  filename.gsub("_", "your_special_character/s")
  • Замените подчеркивания пробелами и специальные символы на подчеркивания позже:
  original_filename.gsub("_", " ")
  original_filename.gsub("your_special_character/s", "_")
...