[英]How to upload a text file using Python-Requests without writing to disk
[英]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.