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

news2025/1/16 17:50:24

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/678562.html

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

相关文章

chatgpt赋能python:Python画照片上的人——让照片更生动

Python画照片上的人——让照片更生动 随着社交媒体的普及&#xff0c;我们经常会在朋友圈或者Instagram上看到各种美丽的照片&#xff0c;不管是旅游照还是日常生活中的自拍&#xff0c;照片已经成为了人们生活中不可或缺的一部分。 为了让照片更加生动&#xff0c;有时候我们…

chatgpt赋能python:用Python绘制黑色图像的SEO优化

用Python绘制黑色图像的SEO优化 Python是一种功能强大的编程语言&#xff0c;由于其易于学习和使用的特性&#xff0c;已经成为数据科学和机器学习的首选工具。同时&#xff0c;Python还拥有强大的可视化能力&#xff0c;可以帮助数据科学家和机器学习工程师更好地理解和呈现他…

chatgpt赋能python:Python的Popen介绍及使用方法

Python的Popen介绍及使用方法 在Python编程中&#xff0c;我们经常需要执行外部命令并获取结果。而Python中的Popen函数就是一个方便的工具&#xff0c;可以启动另一个进程并与之交互。在本文中&#xff0c;我们将介绍Popen的基础知识以及使用方法。 Popen的基本用法 Popen是…

关于 html2canvas 将HTML导出图片

最近我看到了一篇关于如何解决 HTML2Canvas 导出图片模糊的问题的博客。在过去的项目中&#xff0c;我也使用过 HTML2Canvas 插件将活动页面导出为图片&#xff0c;并且好像也遇到了类似的问题&#xff0c;尽管记忆已经有些模糊了。今天我想仔细研究一下这个问题的原因。 在网…

计系(2)复习

期末了&#xff0c;就是看书有点看不进去。所以我想着打字打出来吧&#xff0c;应该能看进去一些。 目录 第一章 计算机系统漫游 第二章 信息的表示和处理 第三章 程序的机器级表示 第六章 存储器层次结构 第七章 链接 第一章 计算机系统漫游 1.2 程序被其他程序翻译成不…

信道特性(通信原理)

信道模型&#xff1a;信道模型的相关知识用信息理论与编码的知识来进行学习。 信道的分类&#xff1a;根据通信信道一般性来划分。 信道的噪声也是值得探究的一个学习点&#xff0c;感兴趣的可以进行查找。 根据信道输入/输出信号在时间和幅值上的离散或连续来划分如下&#…

【刷题笔记】牛客网:链表指定区间内反转

【刷题笔记】牛客网&#xff1a;链表指定区间内反转 一、题目描述及示例 二、思路分析 1、首先&#xff0c;我们来定义一个虚拟的头节点tempHead&#xff08;原因&#xff1a;如果从第一个位置开始反转&#xff0c;则可以不用进行特殊情况考虑&#xff09;&#xff0c;并使te…

chatgpt赋能python:PythonGCD:介绍与计算方法

Python GCD&#xff1a;介绍与计算方法 Python是一种流行的编程语言&#xff0c;它在计算数学问题时也非常实用。其中一个基本的数学问题就是计算两个或多个数的最大公约数&#xff08;GCD&#xff09;。Python的math库提供了计算GCD的方法&#xff0c;但我们也可以编写我们自…

13.STM32F103C8使用PSRAM64H外扩RAM空间

一、简介 最近在调试STM32F103C8驱动墨水屏的实验&#xff0c;在使用过程中&#xff0c;需要使用大内存的RAM需要&#xff0c;由于C8T6的RAM空间只有20KB&#xff0c;而墨水屏的需要的内存为800*480*2/893.75KB。 在网上查了相关的方案&#xff0c;都是使用STM32F103ZE外扩IS6…

基于模拟退火算法的旅行商问题优化(matlab程序)

0.代码链接 基于模拟退火算法的旅行商问题优化&#xff08;matlab程序&#xff09;资源-CSDN文库 1.简述 金属退火是将金属加热到一定温度&#xff0c;保持足够时间&#xff0c;然后以适宜速度冷却(通常是缓慢冷却&#xff0c;有时是控制冷却)的一种金属热处理工艺。模拟退…

ubuntu22.04安装atlas2.0.0

这是本人《数据治理》课程的课程实验&#xff0c;对本人来说非常具有挑战性。 环境: 1、Apache Atlas 2.0 2、JDK 1.8.0_251 3、Maven 3.6.3 因为是课程作业&#xff0c;不用于生产。使用Atlas内嵌Hbase与Solr的部署方式。 在ubuntu裸机上安装&#xff0c;裸机未安装java&#…

ChatGPT | Word表格整体输出

本文来自欧巴Godwin的博客 &#xff0c;引用必须注明出处&#xff01; 用LangChain读取Word和PDF的文字内容是好的&#xff0c;但如果内容包含表格则读取出来的内容完全没法看。用ChatGPT往往是做企业知识库&#xff0c;所以会出现一个场景&#xff0c;即员工想让ChatGPT讲解包…

2、数据库操作语句:多表查询(表employ、department、location)

目录 1、多表查询连接条件 1&#xff09;在employ、department两张表中查询 2&#xff09;若查询语句中出现了多个表中都存在的字段&#xff0c;必须指明此字段所在的表。 3&#xff09;如果表名比较长&#xff0c;SQL语句中多次使用表名&#xff0c;可以给表起别名&#xf…

chatgpt赋能python:Python实现Fibonacci数列

Python实现Fibonacci数列 Fibonacci数列是一个非常经典的数列&#xff0c;定义如下&#xff1a; F ( 0 ) 0 , F ( 1 ) 1 F(0)0, F(1)1 F(0)0,F(1)1 F ( n ) F ( n − 1 ) F ( n − 2 ) F(n)F(n-1)F(n-2) F(n)F(n−1)F(n−2) 也就是说&#xff0c;第n个数等于前两个数之和…

开环模块化多电平换流器仿真(MMC)N=6

模型简介&#xff1a; 运行环境MATLAB2021a 开环模块化多电平换流器仿真&#xff08;MMC&#xff09;N&#xff1d;6&#xff0c;连接负载&#xff0c;采用载波移相调制。 可以得到换流器输出N&#xff0b;1&#xff1d;7电平的相电压波形。可考虑线路阻抗。 子模块采用半桥结…

chatgpt赋能python:用Python实现网络工具——Ping

用Python实现网络工具——Ping 网络是现代社会不可或缺的一部分&#xff0c;而网络工具也是每个程序员的必备技能之一。其中&#xff0c;Ping是最常用的网络工具之一&#xff0c;主要用于测试两台计算机之间的网络连接质量。今天&#xff0c;我们将着重讨论如何用Python实现Pi…

【初识C语言(5)】C语言关键字+define定义常量和宏

文章目录 1. 常见关键字2. 关键字 typedef3. 关键字 static3.1 修饰局部变量3.2 修饰全局变量3.3 修饰函数 4. define 定义常量和宏 1. 常见关键字 C语言提供了丰富的关键字&#xff0c;这些关键字都是语言本身预先设定好的&#xff0c;用户自己是不能创造关键字的。 这里先主要…

SD/StableDiffusion模型,ai绘画部署教程,谷歌云端零成本部署,支持中文

目录 前言 准备前提 说明 开始搭建 1、第一步&#xff0c;下载ipynb脚本文件 2、第二步&#xff0c;上传一键脚本文件到谷歌云盘 3、选择该.ipynb文件--右键--打开方式--关联更多应用 4、输入框搜索Colaboratory找到该应用&#xff0c;安装 5、安装过程中&#xff0c;…

chatgpt赋能python:Python的pow()函数-实现快速幂运算

Python的pow()函数 - 实现快速幂运算 Python是一门高级编程语言&#xff0c;具有简单易学、功能强大、代码可读性高等特点。在Python的内置函数中&#xff0c;有一个很有用的函数叫做pow()。pow()函数可以对数字进行快速幂运算&#xff0c;其实现方法很简单&#xff0c;但是在…

chatgpt赋能python:Python画轨迹图:认识、用法与优势

Python画轨迹图: 认识、用法与优势 Python的数据可视化能力十分强大。画图工具虽然千千万&#xff0c;但其中&#xff0c;轨迹图是同时准确又美观的图形表现。本文将向读者介绍Python画轨迹图的好处、如何使用以及如何在项目合适的地方使用轨迹图。 了解Python轨迹图 为了更…