分片上传+回调方式,为何回调服务器接收到的回调请求中name为空?

callbackbody设定如下:
CallbackBody: "name=$(fname)&hash=$(etag)"

如果文件小于4MB,回调请求中name和hash均有值;如果文件大于4MB,文件在七牛服务器端已经正确合并完成,回调请求中name为空,hash是有值的。

上传的代码用的是7niu.sinaapp.com里的qiniu.uploader.js,请问问题出在哪儿?

阅读 4.8k
2 个回答

这里先要了解一下普通上传接口和分片上传接口的差别。

普通上传是模拟表单上传,提交的数据内容中会有:

Content-Disposition:       form-data; name="file"; filename="<fileName>"
Content-Type:              application/octet-stream
Content-Transfer-Encoding: binary

<fileBinaryData>
--<frontier>--

这样一段内容,包括本地文件名等信息。

而在切片上传接口中,传递的是文件的数据块,并不包含文件名这些信息。

因此,分片上传过程中,服务端实际是拿不到这个参数值的,也就不会返回了。

文件小于4M的情况下,会使用直传文件的方式。而大于4M时,使用分片上传,也就不会传递fname的内容了。

可以参考我们的上传文档:
http://developer.qiniu.com/docs/v6/api/reference/up/
里面对不同接口的描述

简单的打个比方,直传文件是把一本书完整递给你,而分片上传是把书页拆出来,每4页一叠递给你,原来的封面长什么样,已经看不到了。

这个您最好具体看下您的代码了 分片上传如果是小于4M的话 就分为一个块 然后直接上传第一片上传成功了 然后根据mkfile上传你的size大小的文件 如果设置了key就是根据key返回 但是如果大于4M,中间应该还有一个bput根据分块并发上传,每一个上传的cxt都要递归到下一个上传的query里边,然后,最后mkfile的时候,所有的cxt都要在body里边都待罗列出来的,逻辑比较复杂所以官方不推荐的,毕竟上传的时候bput要串行上传,然后每次上传uptoken都待生成一次~~个人感觉比较不划算~~您也可以把您的逻辑代码弄出来,这样我们好帮您分析哪里错误了~~或者网站地址

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进