publish method

  1. @override
Future<PublishResult> publish(
  1. File file, {
  2. Map<String, String>? environment,
  3. Map<String, dynamic>? publishArguments,
  4. PublishProgressCallback? onPublishProgress,
})

Implementation

@override
Future<PublishResult> publish(
  File file, {
  Map<String, String>? environment,
  Map<String, dynamic>? publishArguments,
  PublishProgressCallback? onPublishProgress,
}) async {
  PublishQiniuConfig publishConfig = PublishQiniuConfig.parse(
    environment,
    publishArguments,
  );

  try {
    Auth auth = Auth(
      accessKey: publishConfig.accessKey,
      secretKey: publishConfig.secretKey,
    );

    String saveKey =
        '${publishConfig.savekeyPrefix}${file.path.split('/').last}';

    String uploadToken = auth.generateUploadToken(
      putPolicy: PutPolicy(
        scope: publishConfig.bucket,
        deadline: (DateTime.now().millisecondsSinceEpoch ~/ 1000) + 3600,
        saveKey: saveKey,
      ),
    );

    Storage storage = Storage();
    PutController putController = PutController();

    int sent = 0;
    int total = file.lengthSync();

    putController.addSendProgressListener((double percent) {
      if (onPublishProgress != null) {
        sent = (total * percent).toInt();
        onPublishProgress(sent, total);
      }
    });

    if (onPublishProgress != null) {
      onPublishProgress(sent, total);
    }
    PutResponse putResponse = await storage.putFile(
      file,
      uploadToken,
      options: PutOptions(
        controller: putController,
      ),
    );
    return PublishResult(
      url:
          '${publishConfig.bucketDomain ?? '<bucketDomain>'}/${putResponse.key}',
    );
  } on StorageError catch (error) {
    throw PublishError('${error.code} - ${error.message}');
  } catch (error) {
    throw error;
  }
}