Запись файла в динамический путь на сервере в Django

-1

Я рассматривал множество подобных вопросов, как в Google, так и в StackOverflow, но похоже, что это не удовлетворительное решение, которое работает для меня.

Моя ситуация такова:

Я использую загрузку файла jQuery, следуя инструкциям здесь.

Место, где я хочу сохранить мои файлы, является динамическим и зависит от имени username и session_key.

Это функция записи файла -

def handle_uploaded_file(file, session_key, username):
    folder_path = os.path.dirname(os.path.realpath(__file__)) + '\\Source\\' + username + '\\session_id_' + session_key
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
    save_path = folder_path + '\\Source Files'
    with open(save_path, 'wb+') as destination:
        for chunk in file.chunks():
            destination.write(chunk)

Я попытался загрузить файл с именем "normal.csv", но вместо этого я получил файл с именем "Исходные файлы" без расширения внутри каталога.

Когда я изменил путь внутри функции open() чтобы

with open(save_path+file.name, 'wb+') as destination

Я получил файл с именем "Source Filesnormal.csv".

Затем я попытался изменить save_path на folder_path + '\\Source Files\\' и передал в save_path+file.name чтобы open(), но затем он сказал No such file or directory.

Я очень смущен тем, как попасть в папку и записать файл.

Я не могу использовать MEDIA_URL здесь, потому что это зависит от имени username и session_key.

  • 0
    используйте os.path.join чтобы получить путь к месту назначения. Конкатенация строк не является хорошим способом для этой цели.
Теги:
io

1 ответ

1
Лучший ответ

Вы не указали имя загруженного файла на путь назначения.

Это должно быть примерно так:

save_path = os.path.join(folder_path, 'Source Files', file.name)

который вы дадите вам путь следующим образом:

...\Source Files\your_uploaded_file_name

Но имейте в виду, что вам нужно проверить наличие каталогов в этом пути. Таким образом, проверка os.path.exists на "Исходные файлы" была бы хорошей.

source_files_path = os.path.join(folder_path, 'Source Files')

if not os.path.exists(source_files_path):
    os.mkdirs(source_files_path)

save_path = os.path.join(source_files_path, file.name)
  • 0
    Да спасибо. Как глупо с моей стороны. Я полностью забыл проверить наличие вложенного каталога.
  • 0
    знаешь, так бывает рад, что это помогло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню