#python #django #python_2x
Окружение: Windows 8 Python 2.7.9 Django 1.6 openpyxl (для работы с файлами формата "*.xlsx") Основная задача: Получить от пользователя файл формата "*.xlsx", прочитать его и загрузить данные в Систему. Шаг на котором возникает проблема: попытка переименовать файл (для приведения к нужному типу) Traceback: File "C:\PythonPtoject\venv\Mygtn\lib\site-packages\django\core\handlers\base.py" in get_response 114. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\PythonPtoject\project\MyGtn\MyGtn\AppGtn\views.py" in appgtn_import_in_system 266. os.rename(abs_file_data,abs_file_data_path + '.' + file_extension) Exception Type: WindowsError at /register/import_in_system/ Exception Value: 32 ������� �� ����� �������� ������ � ����� Пояснения: Для получения файла от пользователя использую простой html ("<" и ">" убрал специльно): form action="/register/import_in_system/" method="post" enctype="multipart/form-data">{% csrf_token %} input type="file" name="file_to_import"> button type="submit">Загрузить файл импорта /form После выбора пользователем файла и нажатия кнопки "Загрузить файл импорта" файл сохраняется во временную папку (механизм сохранения по умолчанию) с расширением "*.upload" Пример: C:\users\sss\appdata\local\temp\t6rjr4.upload Данное расширение openpyxl не понимает, поэтому я пытаюсь переименовать файл, а точнее сменить у него расширение с ".upload" на ".xlsx" используя os.rename() код с переименованием: abs_file_data = 'c:\\users\\sss\\appdata\\local\\temp\\t6rjr4.upload' # (текущий абсолютный путь до файла) abs_file_data_path = 'c:\\users\\sss\\appdata\\local\\temp\\t6rjr4' # (абсолютный путь до файла без расширения) file_extension = u'xlsx' # (новое расширение файла) os.rename(abs_file_data,abs_file_data_path + '.' + file_extension) Но при попытке выполнить эту строчку возникает указанная выше ошибка.
Ответы
Ответ 1
Попробуйте переименовывать не после загрузки, а средствами Django указывать правильный путь загрузки (вместе с названием файла) def content_file_name(instance, filename): ext = os.path.splitext(filename) filename = "%s_%s.%s" % (instance.user.id, instance.id, ext) return os.path.join('uploads', filename) class MyFileUpload(models.Model): # ... file = models.FileField(upload_to=content_file_name)
Комментариев нет:
Отправить комментарий