конвертировать WAV-файл, полученный в ответ на запрос BLOB-объекта - PullRequest
2 голосов
/ 25 июня 2019

Я пытаюсь получить WAV-файл в ответ на запрос POST.Я использую send_file во Flask.Я пытаюсь получить файл на стороне клиента в ответе.В конечном итоге я преобразовал его в большой двоичный объект, чтобы его можно было автоматически загрузить.

Это код API для сервера:

@app.route('/drums', methods = ['GET', 'POST'])
@cross_origin()
def upload_drums():
   if request.method == 'POST':
      f = request.files['file']
      f.save(secure_filename(f.filename))

      test_run()

      return send_file('C:/Users/Titus/Separation/results/dsd/music.wav', mimetype="audio/wav")

Это клиентский скрипт для запроса на публикацию:

getDrum(event: any) {

  event.preventDefault();
  let file = this.state.file;
  const formData = new FormData();

  const blob = file as Blob;
  formData.append("file", blob);

  axios
    .post("http://localhost:5000/drums", formData)
    .then((res: any) => {
      console.log(res);
      const url = window.URL.createObjectURL(new Blob(res.data, { 'type' : 'audio/wav' }));
      const link = document.createElement('a');
      link.href = url;
      link.setAttribute('download', 'foo.wav'); //or any other extension
      document.body.appendChild(link);
      link.click();
    })
    .catch((err: any) => console.warn(err));
}

Я получаю ошибку "provided value cannot be converted to a sequence" при попытке преобразовать res.data в WAV-объект.Файл успешно получен, и верный файл отправлен обратно.

Создание большого двоичного объекта с [res.data] вместо res.data фактически загружает файл, но файл не может быть воспроизведен (он поврежден).Я подозреваю, что данные из ответа должны быть в двоичном формате.

1 Ответ

2 голосов
/ 25 июня 2019

когда вы делаете запрос, вы должны быть конкретны в отношении формата, который вы хотите вернуть, добавьте эту опцию к вызову axios:

responseType: 'blob'
...