tencentyun / cos-js-sdk-v5

腾讯云 COS JS SDK(XML API)
https://cloud.tencent.com/product/cos
MIT License
330 stars 567 forks source link

getObject不触发onProgress #95

Closed Billiballa closed 3 years ago

Billiballa commented 3 years ago

上传文件时,简单或分片都可以可以触发onProgress,下载可以成功但是不会触发onProgress。


COSInstance.getObject({
  Bucket,
  Region,
  Key: `/9551e17eb27f9a4ffac69e5bfdb04591.pdf`,
  DataType: 'arraybuffer',
  onProgress: console.log, // 这里不会打印
}, console.log); // 这里会打印

之前使用的是v1.1.0,升级到v1.1.2依然不行 看了之前的文档,设置ProgressInterval也无效 请验证一下是否存在问题,或者是需要设置某些请求头才可以?

carsonxu commented 3 years ago

很可能是使用了 nuysoft/Mock 库拦截了 XMLHttpRequest 但没处理 xhr.upload.onprogress,https://github.com/nuysoft/Mock/issues/416 建议用户换成 lavyun/better-mock

Billiballa commented 3 years ago

@carsonxu 刚刚粗略的看了下代码,似乎下载时没有对onProgress参数做处理? https://github.com/tencentyun/cos-js-sdk-v5/blob/00fb9f1ac59c88f130c9ac377e02d32ee727be3d/src/base.js#L1786-L1797 上传则处理了 https://github.com/tencentyun/cos-js-sdk-v5/blob/00fb9f1ac59c88f130c9ac377e02d32ee727be3d/src/base.js#L1847-L1850 https://github.com/tencentyun/cos-js-sdk-v5/blob/00fb9f1ac59c88f130c9ac377e02d32ee727be3d/src/base.js#L1864-L1875

carsonxu commented 3 years ago

我搞错了,cos.getObject 在浏览器不支持 onProgress 如果有需要下载进度可以按分片下载,按分片粒度显示进度。 不过这里既然是要 getObject 是下载到内存里,应该都会是小文件吧,就不需要显示进度了? 如果只是下载到本地可以,可以 cos.getObjectUrl 然后交给带 download 属性的 a 标签下载。

Billiballa commented 3 years ago

axios 是实现了下载进度的,考虑支持一下么?

https://github.com/axios/axios/blob/59ab559386273a185be18857a12ab0305b753e50/lib/adapters/xhr.js#L148-L156

或者更新一下文档吧,去掉参数说明里的onProgress。

https://cloud.tencent.com/document/product/436/35649#.E4.B8.8B.E8.BD.BD.E5.AF.B9.E8.B1.A1

carsonxu commented 3 years ago

@Billiballa v1.1.6 已支持

carsonxu commented 3 years ago

感谢反馈。