Я рассматривал множество подобных вопросов, как в 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
.
Вы не указали имя загруженного файла на путь назначения.
Это должно быть примерно так:
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)
os.path.join
чтобы получить путь к месту назначения. Конкатенация строк не является хорошим способом для этой цели.