TencentCloud / cos-sdk-flutter-plugin

对象存储COS Flutter语言SDK(桥接plugin实现)
Apache License 2.0
8 stars 5 forks source link

强制清老临时密钥缓存过期和用新的临时密钥上传失败,新密钥不传给cosApi #13

Closed toknT closed 4 months ago

toknT commented 4 months ago

页面弹窗后选文件上传

强制清老临时密钥缓存过期和用新的临时密钥的代码

    await Cos().forceInvalidationCredential();
    SessionQCloudCredentials cred = await getUploadKey();
    await Cos()
        .initWithScopeLimitCredential(CosFetchScopeLimitCredentials(cred));
    String region = COS_REGION;
    CosXmlServiceConfig serviceConfig = CosXmlServiceConfig(
      region: region,
      isDebuggable: true,
      isHttps: true,
    );
    await Cos().registerDefaultService(serviceConfig);
    TransferConfig transferConfig = TransferConfig(
      forceSimpleUpload: false,
      enableVerification: true,
      divisionForUpload: 2097152, 
      sliceSizeForUpload: 1048576, 
    );
    await Cos().registerDefaultTransferManger(serviceConfig, transferConfig);

Navigator.pop切换下就好了,可惜UI被破没照原型图设计领导要弹窗上传(原型图是跳转上传页后再pop回...)

另外是否升级到1.1.2就好了领导说要具体说法不能给他"升级下就好了"😅

jordanqin commented 4 months ago

只需要按照文档保证initWithSessionCredential中IFetchCredentials在调用是获取到正确的临时秘钥即可,通过forceInvalidationCredential可以清除缓存的临时秘钥,sdk会会自动再调用传入的IFetchCredentials获取新的临时密钥。

大概流程是: 1、sdk会通过业务方initWithSessionCredential中IFetchCredentials获取临时密钥并缓存到内存中,直到密钥失效,失效后下次cos请求前sdk会自动再次调用IFetchCredentials获取新的临时秘钥并缓存。 2、forceInvalidationCredential会强制清除缓存的临时密钥,无论已缓存的临时密钥是否失效。