我正在尝试将.wav
文件(让我们说test.wav
)上传到我的Google存储桶中,但是我遇到了一些问题:存储对象通过适当的“测试”上传。 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()
,但它们对我也不起作用。
理想情况下,我希望文件能够成功上传并可以通过Google的STT进行转录。
感谢和问候。
答案 0 :(得分:0)
找到了解决此问题的方法。我已改用here所示的方法,而不是使用请求模块。
这样做可以正确地上传文件,而不是将其数据上传到扩展名为.wav
的文件。从而解决了我的问题。
答案 1 :(得分:0)
您正在将uploadType
参数指定为media
。这意味着请求的主体就是您要上传的对象的主体。但是,您将POST的body字段指定为字典,其中包含诸如“” 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)