首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用python-requests将.wav文件上传到存储桶

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

Stack Overflow用户
提问于 2019-07-10 20:22:04
回答 2查看 808关注 0票数 0

我正在尝试上传一个.wav文件(比方说test.wav)到我的谷歌存储桶中,但是我遇到了一些问题:一个使用适当的'test.wav‘名称上传的存储对象,但里面只是我请求中的数据。存储桶中的contentType也显示为application/x-www-form-urlencoded

我的存储桶有公共的读/写/删除权限,上传其他类型的文件也没问题。这种上传方式也可以通过postman很好地工作。

代码语言:javascript
复制
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)

目前,我得到了以下错误:

代码语言:javascript
复制
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 
4420: character maps to <undefined>

我也尝试过scipy.io.wavfile.read()pydub.AudioSegment(),但它们也不适用于我。

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

谢谢并致以问候。

EN

回答 2

Stack Overflow用户

发布于 2019-07-12 17:48:46

已找到解决此问题的方法。我没有使用requests模块,而是改用here所示的方法。

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

票数 0
EN

Stack Overflow用户

发布于 2019-07-13 01:35:41

您正在将uploadType参数指定为media。这意味着请求的主体就是您正在上传的对象的主体。但是,您将帖子的正文字段指定为包含""acl“”、“"signature”“和”"file“”等字段的字典。看起来您可能正在尝试一种表单样式的帖子,但这不是媒体上传的样子。“

下面是如何使用请求将媒体样式上传到GCS:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56970601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档