Back4app创建sound类对象时文件上传失败问题求助
Fixing "schema mismatch for sounds.audio; expected File but got Array" in Back4app
我来帮你搞定这个文件上传的问题,你遇到的错误是因为请求的构造方式不符合Back4app对File类型字段的要求。
错误原因分析
你当前的代码里,把open("a.mp3", 'rb')直接赋值给了audio.__type,这会让requests把文件对象错误地解析成数组类型,导致接口识别到的是Array而不是预期的File。Back4app要求上传File字段时,需要通过multipart/form-data格式提交,同时分开声明字段类型和传递文件内容。
修正后的代码
下面是调整后的正确代码,核心是把文件内容放到files参数中,同时在data里正确声明File类型:
import requests headers = { "X-Parse-Application-Id": "hidden", "X-Parse-REST-API-Key": "hidden", } # 这里的__type要设为字符串"File",告诉Back4app字段类型 data = { "audio": { "__type": "File", "name": "a.mp3" }, "displayText": "test" } # 用files参数传递实际的文件内容,键名要和data里的audio字段对应 files = { "audio": open("a.mp3", 'rb') } def main(url): with requests.Session() as req: req.headers.update(headers) # 同时传入data和files,requests会自动处理成multipart/form-data格式 r = req.post(url, data=data, files=files) print(r.text) main("https://parseapi.back4app.com/classes/sounds")
关键说明
data中的audio.__type必须是字符串"File",这是Back4app识别File类型的标识- 实际的文件内容要通过
files参数传递,键名需要和data中对应的字段名一致(这里是"audio") - 使用这种方式提交时,requests会自动设置正确的
Content-Type为multipart/form-data,符合Back4app的接口要求
内容的提问来源于stack exchange,提问作者αԋɱҽԃ αмєяιcαη
相关产品推荐
相关产品推荐

