2017-01-26 3 views
0

У меня есть веб-приложение Python, которое выполняется локально в веб-браузере для удобства интерфейса, обрабатывает файлы, которые пользователь выбирает, и сохраняет обработанные данные. Мне нужно добавить функцию, которая создает новый подкаталог в той же папке, где был выбран файл (т. Е. Если файл является path/fname.txt, мне нужно создать path/fname /, где я могу поместить обработанные данные). Как мне получить доступ к этому пути к файлу?Получить путь к файлу, загруженному в Flask

В других проектах я просил указать путь отдельно, но это неудобно, и я не хочу, чтобы пользователь делал этот посторонний шаг для каждого файла.

@app.route('/getthefile', methods=['POST']) 
def getthefile(): 
    file = request.files['myfile'] 
    filename = secure_filename(file.filename) 
    new_path = os.path.abspath(filename) 
    # gives me the wrong path 
+0

Извините, если не ясно; У меня есть имя файла, но у меня проблемы с извлечением пути. Путь к «filename» не совпадает с тем путем, где я фактически выбираю файл - это файл, добавленный к текущему рабочему каталогу, из которого я запускаю скрипт python. –

+0

Загруженные файлы не имеют путей. Путь на моем компьютере не имеет никакого значения на вашем сервере (и также является потенциальной проблемой безопасности). – davidism

+0

Мне нужно место для размещения каталога. Новый каталог должен быть родным исходным файлом. Информация о имени файла, которую я получаю, - это только текущий каталог, в котором я запускаю сценарий Python Flask от –

ответ

0

Для того, чтобы не выставлять ненужную информацию о системе клиента, только HTTP-сообщение отправляется только с именем файла. Полный путь не отправляется. Посмотрите на HTTP multipart/form-data request:

Content-Type: multipart/form-data; boundary=AaB03x 

--AaB03x 
Content-Disposition: form-data; name="submit-name" 

Larry 
--AaB03x 
Content-Disposition: form-data; name="files"; filename="file1.txt" 
Content-Type: text/plain 

... contents of file1.txt ... 
--AaB03x-- 

Как вы можете видеть, информация очень минимальна. Путь не указан.

Аналогично, File API разрешает доступ к имени файла.

К сожалению, вы не сможете получить полный путь от ввода файла.