Flutter 文件上传(七牛云)简单封装

前言:记录了七牛云上传图片的简单封装、若有不足 欢迎指正。


开始前准备:

A、七牛sdk版本一定要和dart版本相对应(推荐用any方式、让其自己去匹配);

 qiniu_flutter_sdk: any

B、七牛上传文件所需的参数:

1、token->去自己服务器拉取就好、这个一般由后端来管理;

2、file ->要上传的文件;

3、key -> 类似于文件id (后面讲)

本文网络层用的dio库、无需关注

 官方文档: Flutter SDK_SDK 下载_对象存储 - 七牛开发者中心

1、上代码:

class QiNiuManager{static final QiNiuManager instance = QiNiuManager.internal();factory QiNiuManager(){return instance;}QiNiuManager.internal();///七牛上传配置类Storage storage = Storage();///上传进度监听、及上传状态控制(取消上传...)PutController putController = PutController();String? domain;///获取七牛token T_fetchQiniuToken(NetworkCompletion networkCompletion){EioHttpManager().post(ApiUser.qiniuToken).then((respons){if(respons.isSuccess){QiNiuEntity qnEntity = QiNiuEntity.fromJson(respons.data);domain = qnEntity.domain;networkCompletion(qnEntity.token);}});}///上传文件uploadFile(File file,NetworkCompletion networkCompletion,{ProgressListener? progressListener}){debugPrint('uploadFile ${file.toString()}');// 添加整体进度监听if (progressListener != null) {putController.addProgressListener((percent) {progressListener(percent);});}// 添加状态监听putController.addStatusListener((status) {if (status == StorageStatus.Success) {debugPrint('StorageStatus Success');} elseif(status == StorageStatus.Error){networkCompletion(null);debugPrint('StorageStatus Error');} elseif(status == StorageStatus.Cancel){networkCompletion(null);debugPrint('StorageStatus Cancel');}});var key = '${file.path}/${DateTime.now().millisecondsSinceEpoch}';_fetchQiniuToken((data) => {debugPrint('七牛token $data'),// 使用 storage 的 putFile 对象进行文件上传storage.putFile(file, data, options: PutOptions(controller: putController,key: key)).then((value){debugPrint('hash ${value.hash}  key ${value.key}  rawData ${value.rawData}  toString ${value.toString()}');networkCompletion('$domain/${value.hash}');})});}///取消上传cancelUpload() => putController.cancel();
}

用于回调的函数:

 代码:

//所有的回调方法
typedef NetworkCompletion = Function(dynamic data);//进度回调
typedef ProgressListener = Function(double progress);

注意:

_fetchQiniuToken() 函数无需关注、主要为了获取七牛的token;

ProgressListener 用于进度回调、NetworkCompletion 用于成功后回调;

注意key的设置、此处是以文件路径+时间戳、如果key不设置 会有概率出现文件上传失败问题(报文件已存在错误);

key应该就是存储在七牛的文件名、目前还不清楚七牛是如何处理默认key(不传key)导致文件名冲突问题;

至此over!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows terminal 添加 git bash 解决git中文乱码显示问题

Windows terminal 添加 git bash 解决git中文乱码显示问题 在 windows terminal 中配置git 说明: 点击箭头选择设置 说明: 点击"添加新配置文件"配置名称命令行,可执行文件的具体语句 C:\Program Files\Git\bin\bash.exe启动目录…

Java Runnable,Callable和FutureTask详解

目 录 1 序言 2 基本概念 2.1 Runnable 和 Callable的区别 2.2 Future 和 FutureTask 2.3 ExecutorService中Future的应用 2.4 Future submit(Runnable task) 2.5 Future submit(Callable task) 2.6 ExecutorService中execute()在ThreadPoolExecutor中实现如下&#xff…

C# PaddleDetection 版面分析

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using Sdcb.PaddleDetection; using Sdcb.PaddleInference; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…

途游游戏 x 极狐GitLab “通关” DevOps :单元测试从无到优,覆盖率 0→80%

目录 4 个工具孤岛 → 极狐GitLab 全家桶, 被动的「人找进度」 → 高效的「进度找人」 把 Code Review 做扎实 代码质量「向左移」,修复成本「往下降」 从无到「优」 自动执行单元测试,覆盖率 0→80% 你喜欢玩游戏吗? 最近…

码题集oj赛(第八次)——MT2179 01操作

一、题目 二、格式 三、样例 //输入&#xff1a; 4 10 1101 */-*-*-/*/ //输出&#xff1a; 10110注意&#xff1a; 四、代码实现 #include<bits/stdc.h> using namespace std; const int N 5e7 7; int n, m; char a[N], c; int main() {cin>>n>>m>…

MIT 6.824 -- MapReduce -- 01

MIT 6.824 -- MapReduce -- 01 引言抽象和实现可扩展性可用性(容错性)一致性MapReduceMap函数和Reduce函数疑问 课程b站视频地址: MIT 6.824 Distributed Systems Spring 2020 分布式系统 推荐伴读读物: 极客时间 – 大数据经典论文解读DDIA – 数据密集型应用大数据相关论文…

Elasticsearch官方测试数据导入

一、数据准备 百度网盘链接 链接&#xff1a;https://pan.baidu.com/s/1rPZBvH-J0367yQDg9qHiwQ?pwd7n5n 提取码&#xff1a;7n5n文档格式 {"index":{"_id":"1"}} {"account_number":1,"balance":39225,"firstnam…

Python(六十七)什么是元组

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

全志F1C200S嵌入式驱动开发(应用程序开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 我们在开发soc驱动的时候,很多情况下也要验证下当前的驱动功能是否正确。当然除了验证驱动功能之外,我们还要编写业务代码和流程代码。这中间就和各行各业有关了,有的是算法,有…

MySQL常见问题处理(三)

MySQL 常见问题解决 夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库安装(二), 如果没有看过, 请观看上一章 一. root 用户密码忘记&#xff0c;进行重置操作 复制内容来源链接: https://blog.csdn.net/weixin_48927364/article/details/123556927 一.…

java io流 学习笔记

1. IO 流能干什么 通过IO我们能对硬盘文件进行读和写。(网络数据的传输也涉及到io)。 2. IO流的分类 按照 流的方向 进行分类&#xff1a;分为输入、输出流。 往内存中去&#xff1a;叫做输入(Input)。或者叫做读(Read)。 从内存中出来&#xff1a;叫做输出(Output)。或者叫…

EVE-NG MPLS LDP LSP

目录 1 拓扑 2 配置步骤 2.1 配置接口IP 2.2 配置OSPF 2.3 使能LDP 2.3 在VPC上验证 1 拓扑 2 配置步骤 2.1 配置接口IP LER1 interface LoopBack 0ip address 1.1.1.9 32 quitinterface GigabitEthernet1/0ip address 10.1.1.1 255.255.255.0quitinterface GigabitEth…

基于Java+SpringBoot+SpringCloud+Vue的智慧养老平台设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

VSCode配置SSH远程免密登录服务器

VScode远程开发时&#xff0c;每次都需要输入密码&#xff0c;其实同理可以和其他应用类似配置免密登录&#xff0c;流程也类似。 1.在本地主机生成公钥和秘钥 ssh-keygen 2.将公钥内容添加至服务器 将生成钥对时会给出其保存路径&#xff0c;找到公钥&#xff0c;复制内容&am…

CSS中所有选择器详解

文章目录 一、基础选择器1.标签选择器2.类选择器3.id选择器4.通配符选择器 二、复合选择器1.交集选择器2.并集选择器 三、属性选择器1.[属性]2.[属性属性值]3.[属性^属性值]4.[属性$属性值]5.[属性*属性值] 四、关系选择器1.父亲>儿子2.祖先 后代3.兄弟4.兄~弟 五、伪类选择…

【EI/SCOPUS征稿】2023年算法、图像处理与机器视觉国际学术会议(AIPMV2023)

2023年算法、图像处理与机器视觉国际学术会议&#xff08;AIPMV2023&#xff09; 2023 International Conference on Algorithm, Image Processing and Machine Vision&#xff08;AIPMV2023&#xff09; 2023年算法、图像处理与机器视觉国际学术会议&#xff08;AIPMV2023&am…

Flink - sink算子

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 1. Kafka_Sink 2. Kafka_Sink - 自定义序列化器 3. Redis_Sink_String 4. Redis_Sink_list 5. Redis_Sink_set 6. Redis_Sink_hash 7. 有界流数据写入到ES 8. 无界流数据写入到ES 9. 自定…

Python批量查字典和爬取双语例句

最近&#xff0c;有网友反映&#xff0c;我的批量查字典工具换到其它的网站就不好用了。对此&#xff0c;我想说的是&#xff0c;互联网包罗万象&#xff0c;网站的各种设置也有所不同&#xff0c;并不是所有的在线字典都可以用Python爬取的。事实上&#xff0c;很多网站为了防…

iphone备份用什么软件?好用的苹果数据备份工具推荐!

众所周知&#xff0c;如果要将iPhone的数据跟电脑进行传输备份的话&#xff0c;我们需要用到iTunes这个pc工具。但是对于iTunes&#xff0c;不少人都反映这个软件比较难用&#xff0c;用不习惯。于是&#xff0c;顺应时代命运的iPhone备份同步工具就出现了。那iphone备份用什么…

AirLink 101 Wireless N 150 PCI Adapter驱动和管理软件

从光盘里拷出来的&#xff0c;界面比较复古&#xff0c;实际功能聊胜于无 链接&#xff1a;https://pan.baidu.com/s/1clUcp7QsF8QMWdGoZkc_dQ?pwdmkra 提取码&#xff1a;mkra