繁体   English   中英

尝试使用python-requests将.wav文件上传到存储桶

[英]Trying to upload a .wav file to a bucket using python-requests

我正在尝试将.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()但是这些对我也不起作用。

理想情况下,我希望文件能够成功上传并可以通过Google的STT进行转录。

谢谢并恭祝安康。

找到了解决此问题的方法。 我没有使用request模块,而是切换到使用此处显示的方法。

这样做可以正确地上传文件,而不是将其数据上传到扩展名为.wav的文件。 从而解决我的问题。

您正在将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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM