tongchenkeji 发表于:2023-2-17 18:27:570次点击 已关注取消关注 关注 私信 Java-sdk的进度条不支持流[阿里云oss] 暂停朗读为您朗读 Java-sdk的进度条,当上传的对象并不是一个file文件时,而是流对象时,REQUEST_CONTENT_LENGTH_EVENT事件根本不会触发 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 对象存储OSS# 对象存储1210
凌云CloudAM 2023-11-27 23:12:58 1 原因很简单:通过 REQUEST_CONTENT_LENGTH_EVENT 事件获取上传内容的总长度,然后通过REQUEST_BYTE_TRANSFER_EVENT 事件来获取上传的实时进度,从而实现进度条,而流对象并没有固定的内容长度。 其实也有其他办法解决:可以考虑在客户端计算上传内容的长度,然后将其传递给服务端,服务端在处理上传流时就能知道内容长度,从而触发REQUEST_CONTENT_LENGTH_EVENT事件,进而实现进度条的显示。另外,也可以考虑使用其他的进度条组件,如第三方的进度条库或前端框架提供的进度条组件来实现。
六月的雨在钉钉AM 2023-11-27 23:12:58 2 目前来说java在上传或者下载时支持进度条的方法有:ossClient.putObject、ossClient.getObject、ossClient.uploadPart、ossClient.uploadFile以及ossClient.downloadFile方法均支持进度条功能,使用方法与ossClient.putObject类似。这里当你上传的对象不是一个file文件,而是一个流对象时,在进度条回调方法中,应该是触发REQUEST_BYTE_TRANSFER_EVENT下面的代码才对,你的没有触发的话建议你debug一下ProgressEvent 对象是否是eventType不对导致的。
1889111625520762AM 2023-11-27 23:12:58 3 我相信开发人员肯定是知道这点的,因为流来源不同,总长度大小不好确定。 但是你们要在对外文档上显示出来,不然大家理所当然就会认为上传文件和直接上传流都是一并支持进度的; 要么就默认这是bug,再以技术手段屏蔽掉这个差异;
原因很简单:通过 REQUEST_CONTENT_LENGTH_EVENT 事件获取上传内容的总长度,然后通过REQUEST_BYTE_TRANSFER_EVENT 事件来获取上传的实时进度,从而实现进度条,而流对象并没有固定的内容长度。
其实也有其他办法解决:可以考虑在客户端计算上传内容的长度,然后将其传递给服务端,服务端在处理上传流时就能知道内容长度,从而触发REQUEST_CONTENT_LENGTH_EVENT事件,进而实现进度条的显示。另外,也可以考虑使用其他的进度条组件,如第三方的进度条库或前端框架提供的进度条组件来实现。
目前来说java在上传或者下载时支持进度条的方法有:ossClient.putObject、ossClient.getObject、ossClient.uploadPart、ossClient.uploadFile以及ossClient.downloadFile方法均支持进度条功能,使用方法与ossClient.putObject类似。这里当你上传的对象不是一个file文件,而是一个流对象时,在进度条回调方法中,应该是触发REQUEST_BYTE_TRANSFER_EVENT下面的代码才对,你的没有触发的话建议你debug一下ProgressEvent 对象是否是eventType不对导致的。
我相信开发人员肯定是知道这点的,因为流来源不同,总长度大小不好确定。 但是你们要在对外文档上显示出来,不然大家理所当然就会认为上传文件和直接上传流都是一并支持进度的; 要么就默认这是bug,再以技术手段屏蔽掉这个差异;