Flask - динамически создавайте и загружайте файлы в папки - PullRequest
0 голосов
/ 15 октября 2018

У меня есть папка, содержащая три папки.Например:

-folder
 -folder1
  -demo.txt
-folder2
-folder3

Код Python для загрузки выглядит следующим образом:

def upload():
    files = request.files.getlist('file')
    taskname = request.form.get('taskname')
    for file in files:
        file.save('/'.join(['static', taskname, file.filename]))

Форма HTML содержит следующие компоненты:

<input type="file" name="files" webkitdirectory>
<button id="upload-btn" type="button">upload</button>

С учетом вышеизложенногокод Я получаю следующую ошибку:

No such file or directory: 'static/task2/folder1/demo.txt'

Я не нашел похожих вопросов и решения.
Должен ли я анализировать все имена файлов и создавать папки вручную?

1 Ответ

0 голосов
/ 15 октября 2018

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

/static/files
    /task_name/ #uploaded files are here
    /task_name/ #other uploaded files  

app.py

import os
import pathlib
from flask import Flask, render_template, request
from werkzeug.utils import secure_filename

app = Flask(__name__)


app.config['SECRET_KEY'] = '^%huYtFd90;90jjj'
app.config['UPLOADED_FILES'] = 'static/files'


@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST' and 'photos' in request.files:
        uploaded_files = request.files.getlist('photos')
        task_name = request.form.get('task_name')
        filename = []
        pathlib.Path(app.config['UPLOADED_FILES'], task_name).mkdir(exist_ok=True)
        for file in uploaded_files:
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOADED_FILES'], task_name, filename))
        return task_name
    return render_template('upload.html')


if __name__ == "__main__":
    app.run(debug=True)
...