#python #html #flask
Вопрос:
Я сохраняю свой аудиофайл в /статический/загружает/. Мне необходимо прочитать загруженные файлы, которые являются динамическими из этой папки, и создать их спектрограмму. Пожалуйста, подскажите, как этого можно достичь. Я пытаюсь использовать приведенный ниже код, однако он выдает ошибку. app.py
UPLOAD_FOLDER = os.path.join(THIS_DIR,'static','uploads') app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/', methods=['GET','POST']) def upload_files(): filename = None file = request.files['file'] '''to delete any existing file in uploads folder''' if os.path.exists(UPLOAD_FOLDER): shutil.rmtree(UPLOAD_FOLDER) os.mkdir(UPLOAD_FOLDER) time.sleep(5) if request.method == 'POST': if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] if file.filename == '': error = 'No selected file' return render_template(error.html, error = error) if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) return render_template(index.html, filename=filename) @app.route("/processing", methods=["POST","GET"]) def processing(): ''' retrieves file, creates spectrogram''' filename = None filename = ('/static/uploads/' filename).read() fig = create_spectrogram(filename) ................................. .................................
Ошибка типа: можно только объединить str (не «нетип») в str
Мой HTML-файл выглядит следующим образом:
lt;!DOCTYPE htmlgt; lt;htmlgt; lt;headgt; lt;meta charset="utf-8"gt; lt;titlegt;lt;/titlegt; lt;/headgt; lt;bodygt; lt;form method="POST" enctype="multipart/form-data"gt; lt;input type="file" name="file" /gt; lt;input type="submit" value="Upload" /gt; {% if filename %} lt;audio controlsgt; lt;source src="{{ url_for('static', filename='uploads/' filename) }}" type="audio/wav"gt; lt;/audiogt; {% endif %} lt;/formgt; lt;form action = "/processing" method = "POST" enctype = "multipart/form-data" gt; lt;input type = "submit" value="Discover!" gt; lt;/formgt; lt;/bodygt; lt;/htmlgt;
Комментарии:
1. переменная имени файла всегда равна None. Следовательно, вы получаете ошибку «Ошибка типа: можно объединить только str (не «нетип») в str». Я считаю, что вам нужно установить правильный путь к файлу Aduio для чтения.
2. @aberry имя файла будет меняться при каждой загрузке, поэтому я не могу установить имя файла. Как я могу получить доступ к динамическим файлам при каждой загрузке и выполнить обработку загруженного файла?
3. Тогда поделитесь еще одним кодом. Из этого фрагмента кода неясно , как вы получаете имя файла. Вы не назначаете имя файла какой-либо строкой имени файла.
4. @aberry Я обновил код.
Ответ №1:
Я использовал приведенный ниже код для доступа к файлу, и он успешно работал.
@app.route("/uploads", methods=["POST"]) def uploads(): result = {} filename = os.listdir('static/images/uploads') filename = filename[0] print(filename) fig = create_spectrogram([os.path.join(app.config['UPLOAD_FOLDER'], filename)])
HTML-код файла приведен ниже:
lt;div class="form"gt; lt;div class="card-body center" style=" color:black;" gt; lt;form method="POST" enctype="multipart/form-data"gt; lt;input type = "file" name = "file" class="form-control-file" id="exampleFormControlFile1"gt;lt;brgt; lt;input style="margin-right: 60px; background-color:#F7DE40; margin-top: 0px; margin-bottom: 0px;" type = "submit" class="btn btn-light float-left" value="Upload!" name="upload"gt;lt;brgt;lt;brgt; {% if filename %} lt;audio controlsgt; lt;source src="{{ url_for('static', filename='images/uploads/' filename) }}" type="audio/wav"gt; lt;/audiogt; {% endif %} lt;/formgt; lt;form style="margin-top: 5px;" action = "/prediction" method = "POST" enctype = "multipart/form-data" gt; lt;input style="margin-right: 60px; background-color:#F7DE40; margin-top: 0px; margin-bottom: 0px;" type = "submit" class="btn btn-light float-left" value="Discover!" name="discover"gt;lt;brgt;lt;brgt; lt;/formgt; lt;/divgt;