как получить доступ к уже загруженному аудиофайлу из каталога и создать его спектрограмму в колбе

#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;