AWS Amplify:Storage.put的progressCallback为何仅在上传完成时触发?
为什么
progressCallback只在上传完成时触发? 我来帮你排查这个问题,这种情况通常和分块上传的配置或者文件特性有关,以下是几个关键的检查和修复点:
强制启用分块上传:
从你用的API来看,应该是AWS Amplify的Storage模块吧?它默认只对大于5MB的文件开启分块上传,小文件会一次性完成上传,这时候progressCallback自然只会在结束时触发一次。如果想让小文件也能触发中间进度,可以手动指定partSize参数,把分块阈值调小,比如设为1MB:const stored = await Storage.put(filename, file, { contentType: file.type, customPrefix: customPrefix, partSize: 1024 * 1024, // 强制按1MB分块上传 progressCallback(progress) { console.log('当前进度:', progress.loaded, '/', progress.total); }, });确认文件类型:
确保你传入的file是标准的File或Blob对象,如果是base64字符串这类格式,上传逻辑会跳过分块流程,也就不会有中间进度更新。检查Amplify版本:
某些旧版本的@aws-amplify/storage存在进度回调的bug,导致中间进度不触发。建议升级到最新的稳定版本,执行命令:npm update @aws-amplify/storage验证回调输出:
偶尔可能是终端/浏览器的日志缓存让你误以为只触发了一次?可以在回调里加上更详细的信息,比如打印已上传字节和总字节,确认是否真的只有完成时才执行。
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

