29 августа 2013 г.

django upload_to windows 123 bad chars

Использовал свою реализацию upload_to-метода для формирования пути сохранения файлов в FileField-поле модели на основании заголовка сущности (чтобы файлики сохранялись в подпапки контрагентов). При разработке под linux всё было отлично, но в продакшене на одной windows-машине периодически валилась загрузка файлов
File "C:\python27\lib\site-packages\django\core\files\storage.py", line 168, in _save
    os.makedirs(directory)
  File "C:\python27\lib\os.py", line 150, in makedirs
    makedirs(head, mode)
  File "C:\python27\lib\os.py", line 157, in makedirs
    mkdir(name, mode)
WindowsError: [Error 123] Синтаксическая ошибка в имени файла,: u'C:\\inetpub\\wwwroot\\ZooDjangoProject\\media\\file\\\blabla "blabla"'
Выяснилось, что дело в кавычках в имени файлов, который есть запретный символ в винде. Пришлось вспомнить и остальные ограничения, после чего родилось прижившееся экспресс-решение.
def removebadchars(value):
    for c in r'\/:*?"<>|':
        value = value.replace(c, '')
    return value
...
filename = removebadchars(filename)

Комментариев нет:

Отправить комментарий