Попытка загрузить WAV-файл в корзину с помощью Python-запросов - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь загрузить файл .wav (скажем, test.wav) в мое хранилище Google, но у меня возникают некоторые проблемы: объект хранилища загружается с соответствующим именем 'test.wav', но внутри это просто данные из моего запроса. Также contentType в корзине отображается как application/x-www-form-urlencoded.

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


url = "https://www.googleapis.com/upload/storage/v1/b/<bucket_name>/o"

payload ={
    "acl":"public-read",
    "file":open('test.wav'),
    "signature":signature,
    "policy":policy              
}
headers={"contentType":"audio/wav"}
params={"uploadType":"media","name":"test.wav"}
response = requests.post(url,data=payload,headers=headers,params=params)
print(response.text)

В настоящее время я получаю следующую ошибку:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 
4420: character maps to <undefined>

Я также пробовал scipy.io.wavfile.read() и pydub.AudioSegment(), но у меня они тоже не работают.

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

Спасибо и всего наилучшего.

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Вы указываете параметр uploadType как media. Это означает, что тело запроса - это тело загружаемого объекта. Тем не менее, вы задаете поле body вашего POST как словарь с такими полями, как "" acl "," signature "и" file ". Похоже, вы пытаетесь использовать POST в стиле формы, но Это не так, как выглядят загрузки медиа.

Вот как вы можете использовать запросы для загрузки медиа-стиля в GCS:

import requests

url = "https://www.googleapis.com/upload/storage/v1/b/<bucket_name>/o"

headers = {
    "acl": "public-read",
    "Authorization": "Bearer ...",
    "Content-Type": "audio/wav",
}
params = {"uploadType": "media", "name": "test.wav"}
with open('test.wav', 'rb') as file:
  r = requests.post(url, params=params, headers=headers, data=file)
print(r.text)
0 голосов
/ 12 июля 2019

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

При этом файл загружается должным образом, а не загружается в файл с расширением .wav. Тем самым исправляя мою проблему.

...