-
Notifications
You must be signed in to change notification settings - Fork 262
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
上传文件时,可以添加校验参数强制校验key和hash 音频元信息的接口 #365
base: master
Are you sure you want to change the base?
Conversation
上传的时候已经进行了校验检查了,不能通过返回值里的 key 和 hash 做检查,这两个参数可以被修改,不一定会返回 |
能给出源码链接吗?我看到的源码里好像没有检查,出错了并不会报错。 |
另外不能通过key和hash做检查也说不通啊,官网文档列子就是用key和hash做检查的。如果真的会被修改,那我们源码里修改就可以,用户反而不用考虑,直接传 |
这个有人看下回复一下吗 |
原因是 hash 会由于上传方式的不同而变化。SDK 内的 etag 并不完全覆盖所有情况。即存在文件上传正确但 etag 计算出却不一致的情况。
对于表单上传的时候会计算 crc32 并传递给服务端,如果服务端收到的文件计算 crc32 与收到的 crc32 不一致,服务端会返回非 200。 Detailspython-sdk/qiniu/services/storage/uploader.py Lines 96 to 101 in f04c995
python-sdk/qiniu/services/storage/uploaders/form_uploader.py Lines 104 to 121 in f04c995
对于分片上传 v1,SDK 会对服务端返回的 crc32 与本地计算结果比对,如果不一致返回结果为 None 与不一致的那个分片上传的请求响应。 Detailspython-sdk/qiniu/services/storage/uploaders/resume_uploader_v1.py Lines 578 to 596 in 7c25d03
对于分片上传 v2,每一个分片都会计算 md5 并传递给服务端,如果服务端收到的内容计算 md5 与收到的 md5 不一致,服务端会返回非 200。 Detailspython-sdk/qiniu/services/storage/uploaders/resume_uploader_v2.py Lines 683 to 703 in 7c25d03
综上所述,在上传过程已保证数据完整性,如果出错,不会返回 key 与 hash 字段。当前已经不推荐使用 SDK 内的 etag 去做校验。 您看是否已经解答您的疑惑? |
我加这个参数的意义在于, 希望本来要用3行代码完成的事:
变成1行
服务端会返回非 200, key不存在于ret. 这些都不会报错啊. 还是要在外面加判断 |
@ramwin 还是不太明白痛点在哪里。raise 的错误最后也是要处理的。 ret, resp = put_file(...)
if "key" not in ret:
handle_upload_failed() 与 try:
ret, resp = put_file(..., raise_exception=True)
except:
handle_upload_failed() 两种区别不大。 |
我们用sdk时, 不会 单独为了这一行代码做错误处理. 而是在外层框架上, 遇到报错时统一处理. 所以不会在内部函数里再加try except了 |
可以理解为您想要一套 exception 的机制吗?这个我们后面考虑下。 |
上传文件时,可以添加校验参数强制校验key和hash
音频元信息的接口