You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:01:18