flutter七牛云上传sdk插件qiniu_flutter_sdk使用

news2024/11/23 22:20:20

flutter七牛云上传sdk插件qiniu_flutter_sdk使用
最近在拆分代码,将上传组件设置成插件,下面记录下实现过程。

一、创建flutter_plugin上传插件

这里Android Studio使用创建plugin

填写一下信息

  • Project name
  • Project location
  • Description
  • Project type
  • Organization
  • Android Language
  • iOS Language
  • Platforms

在这里插入图片描述

二、代码实现

2.1、实现qiniu_token

// 定义获取token接口
abstract class QiniuToken {
  Future<String> getToken();
}

2.2、实现qiniu_token

class QiniuTokenImpl implements QiniuToken {
  
  Future<String> getToken() {
    // TODO: implement getToken
    return Future.value("");
  }
}

2.3、实现qiniu_uploader

这里使用qiniu_flutter_sdk插件进行上传。
上传需要用到Storage、PutController。
PutController可以用来监听上传的状态等

  • PutController
// 创建 storage 对象
  storage = Storage();

  // 创建 Controller 对象
  putController = PutController();

  // 添加整体进度监听
  putController.onProgress((double percent) {
    print('任务进度变化:已发送:$percent');
  });

  // 添加发送进度监听
  putController.onSendProgress((double percent) {
    print('已上传进度变化:已发送:$percent');
  });

  // 添加状态监听
  putController.addStatusListener((StorageStatus status) {
    print('状态变化: 当前任务状态:$status');
  });

  // 使用 storage 的 putFile 对象进行文件上传
  storage.putFile(File('./file.txt'), 'TOKEN', PutOptions(
    controller: putController,
  ))
  • storage
    使用前必须创建一个 Storage 实例
 // 创建 storage 对象
  storage = Storage();
同时,在构造 Storage 时可以传入一个 Config 控制内部的一些行为,如下:

  // 创建 storage 对象
  storage = Storage(Config(
    // 通过自己的 hostProvider 来使用自己的 host 进行上传
    hostProvider: HostProvider,
    // 可以通过实现 cacheProvider 来自己实现缓存系统支持分片断点续传
    cacheProvider: CacheProvider,
    // 如果你需要对网络请求进行更基础的一些操作,你可以实现自己的 HttpClientAdapter 处理相关行为
    httpClientAdapter: HttpClientAdapter,
    // 设定网络请求重试次数
    retryLimit: 3,
  ));

实现上传的代码如下

QiniuToken qiniuToken;

  // 创建 storage 对象
  // 设定网络请求重试次数
  final Storage storage = Storage(
      config: Config(
    retryLimit: 3,
  ));

  final PutController putController = PutController();

  QiniuUploader(this.tokenFetch) {
    _listen();
  }

  
  Future<UploaderResp> upload(UploaderReq uploaderReq) async {
    // TODO: implement upload
    if (uploaderReq is QiniuUploaderReq) {
      File? file = uploaderReq.req['file'];
      if (file != null) {
        String token = await qiniuToken.getToken();
        PutResponse putResponse = await _uploadFile(file, token);
        UploaderResp<PutResponse> resp = UploaderResp();
        resp.data = putResponse;
        return Future.value(resp);
      } else {
        throw "upload请求req参数file异常!";
      }
    } else {
      throw "upload请求req类型必须是QiniuUploaderReq类型!";
    }
  }

  _listen() {
    // 添加状态监听
    putController.addStatusListener((StorageStatus status) {
      print('QiniuUploader StorageStatus:$status');
    });
  }

  Future<PutResponse> _uploadFile(File file, String token) async {
    String key = md5.convert(utf8.encode(file.path)).toString();
    print("key:${key}");
    return await storage.putFile(
      file,
      token,
      options: PutOptions(
        key: key,
        controller: putController,
      ),
    );
  }

之后在插件代码中flutter_component_uploader

flutter_component_uploader.dart文件中实现

library flutter_component_uploader;

export 'uploader/qiniu_token.dart';
export 'uploader/qiniu_token_impl.dart';
export 'uploader/qiniu_uploader.dart';

学习记录,每天不停进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机入门所需的基础数电和模电知识

要学习单片机并入门相关领域&#xff0c;推荐掌握以下数电和模电的基础知识&#xff1a; 数电知识&#xff1a; 布尔代数和逻辑门&#xff1a;了解布尔代数的基本概念和逻辑门的工作原理&#xff0c;包括与门、或门、非门、与非门、或非门、异或门等。 时序逻辑和时钟信号&a…

AIOps介绍

AIOps介绍 AIOps是指人工智能运维&#xff08;Artificial Intelligence for IT Operations&#xff09;的缩写。它是将人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术应用于IT运维领域的一种方法。 传统的IT运维通常需要人工监测和管理大量的系…

脑机接口科普0022——黑门02:伦理道德问题

本文禁止转载&#xff01;&#xff01;&#xff01;&#xff01; 脑机接口这个技术&#xff0c;是属于黑科技技术中的一种。 现在已经有很多专家&#xff0c;以及机构&#xff0c;提出脑机接口的存在的一些问题。法律是一块的问题&#xff0c;伦理道德是另一块的问题。 虽然…

苹果iPhone14卡死怎么办?解决办法分享!

正常使用的iPhone14虽然很少会出现卡死的情况&#xff0c;但iPhone就是一台微型电脑&#xff0c;像电脑一样“死机”也不是没可能。 有用户称在使用iPhone14时出现突然出现弹出的提示框无法点击取消&#xff0c;锁屏也解决不了死机的问题。同时又因为屏幕其他区域不能操作&…

MySQL免安装配置教程(win10)

一、下载安装包 1.1、下载zip包 打开官网地址下载zip安装包&#xff0c;这里下载的版本是5.7&#xff0c;可自行选择。 对应下载网址&#xff1a;https://downloads.mysql.com/archives/community/ 根据自己电脑进行选择对应安装包 若需要下载msi安装包&#xff08;图形化界…

Mysql漏洞处理之升级版本到5.7.42过程指导手册

一、背景 某次安全漏扫&#xff0c;发现MySQL大量漏洞&#xff0c;基于Mysql之用于内网&#xff0c;且版本确实有点旧&#xff0c;考虑升级&#xff0c;综合漏洞分析&#xff0c;只能升级到最新版5.7.42和8.0.33&#xff0c;现场环境&#xff1a;Mysql 5.7.28、5.7.20和mysql&…

高等职业学院校园IP网络广播应用-河北资源环境职业技术学院校园IP广播

职业院校大学校园IP网络广播在河北资源环境职业技术学院产教融合基地的应用 北京海特伟业科技任洪卓发布于2023年6月20日 一、高等职业院校校园IP网络广播系统-广播中心 河北资源环境职业技术学院产教融合基地-高等职业院校校园IP网络广播系统是基于TCP/IP协议校园局域网构建…

通过GPIO子系统编写LED驱动,应用程序控制LED灯亮灭

1、在内核设备树中添加设备信息&#xff1a; LED1的设备树编写需要参考内核的帮助文档&#xff1a; linux-5.10.61/Documentation/devicetree/bindings/gpio 在根节点内部添加led灯设备树节点 :~/linux-5.10.61/arch/arm/boot/dts $ vi stm32mp157a-fsmp1a.dts myled.c #in…

渗透测试思路总结

一、说明 《Metasploit 渗透测试魔鬼训练营》等书已经对渗透测试的步骤流程划分得比较合理透彻了&#xff0c;但感觉在多次通读该类书藉之后仍总感觉不得要领----要对一台给定的主机进行渗透还是不懂到底该如何着手。想来主要是存在以下两个问题。 第一个是在渗透操作系统时&…

Yolov8优化:引入Soft-NMS,提升密集遮挡场景检测精度

1.Soft-NMS介绍 论文地址:https://arxiv.org/pdf/1704.04503.pdf NMS需要优化的参数: IoU 的阈值是一个可优化的参数,一般范围为0~0.5,可以使用交叉验证来选择最优的参数。 R-CNN会从一张图片中找出n个可能是物体的矩形框,然后为每个矩形框为做类别分类概率: 就…

maven测试依赖的排除

1、概念 当 A 依赖 B&#xff0c;B 依赖 C 而且 C 可以传递到 A 的时候&#xff0c;A 不想要 C&#xff0c;需要在 A 里面把 C 排除掉。而往往这种情况都是为了避免 jar 包之间的冲突。 所以配置依赖的排除其实就是阻止某些 jar 包的传递。因为这样的 jar 包传递过来会和其他 …

parallelStream与CompletableFuture

1 了解parallelStream parallelStream怎么实现的并行处理呢&#xff1f; 其底层是Fork/Join并行计算框架的默认线程池&#xff0c;默认线程池的数量就是处理器的数量&#xff0c;可以使用系统属性&#xff1a;-Djava.util.concurrent.ForkJoinPool.common.parallelism{N} 调整…

【数据库】MySQL 高级(进阶) SQL 语句

文章目录 前提条件一、常用查询1. SELECT&#xff08;显示查询&#xff09;2. DISTINCT&#xff08;不重复查询&#xff09;3. WHERE&#xff08;有条件查询&#xff09;4. AND/OR&#xff08;且/或&#xff09;5. IN &#xff08;显示已知值的字段&#xff09;6. BETWEEN&…

自驾出游擅自使用对讲机属于违法行为?

周末或节假日大多数人通常都会选择自驾出游&#xff0c;或是叫上自己的好友一起出游&#xff0c;这个时候就可以组成一个车队。为了沟通起来更方便&#xff0c;大家一般都喜欢配个对讲机。 不过据调查显示&#xff0c;大多数人并不认为擅自使用对讲机算违法行为。在多个电商平…

【计算机视觉】OFA:通过一个简单的seq2seq的学习框架来统一架构、任务和模态

文章目录 一、导读二、摘要三、介绍四、OFA4.1 I/O & Architecture4.1.1 I/O4.1.2 Architecture 4.2 Tasks & Modalities4.3 预训练数据集4.4 训练与推理4.5 缩放模型 五、实验结果5.1 跨模态任务的结果5.2 单模态任务的结果5.3 zero-shot学习和任务迁移 六、测试结果七…

测试不为人知的小秘密,你占了几个?

1、线上出现小bug&#xff0c;小本本记下&#xff0c;后面偷偷给开发提个bug。 2、操作服务器时&#xff0c;把数据库玩坏了&#xff0c;系统玩崩了&#xff0c;加班熬夜默默的抢救修复。 3、和开发吵了一架&#xff0c;然后重点照顾了他负责的模块&#xff0c;找了一堆bug&a…

智慧无线灌溉在园林中的应用

智慧无线灌溉技术是解决人们生活用水与园林灌溉之间用水矛盾的有效措施之一&#xff0c;对提升园林灌溉效率和节约水资源有着重要的意义。 智慧无线灌溉系统可以自动感知园林植物周围的环境温度、水分等要素&#xff0c;并对感知到的要素进行详细分析和判断&#xff0c;以确定…

小白到运维工程师自学之路 第四十一集 (shell脚本的基本使用)

一、概述 Shell是一种命令行解释器&#xff0c;它是一种编程语言&#xff0c;用于在操作系统上执行命令和脚本。Shell语言是一种脚本语言&#xff0c;它可以用于自动化任务、批处理、系统管理和编写简单的程序。Shell语言通常用于Unix和Linux操作系统中&#xff0c;但也可以在其…

MySQL优化--索引创建原则,索引什么时候会失效

目录 索引创建原则 面试回答 索引什么时候会失效 面试回答 索引创建原则 1). 针对于数据量较大&#xff0c;且查询比较频繁的表建立索引。 2). 针对于常作为查询条件&#xff08;where&#xff09;、排序&#xff08;order by&#xff09;、分组&#xff08;group by&…

链路追踪SkyWalking整合项目以及数据持久化

1. 微服务整合SkyWalking 1.1 通过jar包方式整合 首先我们将一个简单的springboot服务打成jar包。 将其上传到Linux服务器中。 准备一个启动脚本&#xff0c;脚本内容如下&#xff1a; #!/bin/sh # SkyWalking Agent配置 export SW_AGENT_NAMEskywalking‐test #Agent名字,一…