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.hqwc.cn/news/55602.html

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

相关文章

基于springboot+vue的房屋租赁系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

插入排序讲解

插入排序(Insertion-Sort)一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表…

JDWP远程命令执行

活包含着更广阔的意义,而不在于我们实际得到了什么;关键是我们的心灵是否充实。对于生活理想,应该象宗教徒对待宗教一样充满虔诚与热情! 漏洞证明 telnet x.x.x.x一般回返回如图的信息,但是经过测试不返回的也是可以…

数据分析 VS 数据可视化:决战时刻

数据分析和数据可视化是数据科学领域中两个重要的组成部分,很多人不明白两者之间的关系,会误认为是一个东西,其实不然。本文就带大家简单了解一下它们的区别与联系吧! 数据分析是指通过收集、处理和解释数据来获取有关特定问题或…

Excel下拉框样式

1.打开要修改的Excel,选中要修改样式的单元格 2.在上边导航栏中选择 Data,找到 Data Validation,点击下面的 Data Validation… 3.在设置中找到 Allow 项,选择 List。Source中填写可供选择的值,以逗号(…

全志F1C200S嵌入式驱动开发(从DDR中截取内存)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux内核起来的时候,不一定所有的内存都是分配给linux使用的。有的时候,我们是希望能够截留一部分内存的。为什么保留这部分内存呢?这里面可以有很多的用途。比如说,第一,如果…

CI/CD—Docker初入门学习

1 docker 了解 1 Docker 简介 Docker 是基于 Go 语言的开源应用容器虚拟化技术。Docker的主要目标是build、ship and run any app,anywhere,即通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的一次封装、到处运…

unraid docker桥接模式打不开页面,主机模式正常

unraid 80x86版filebrowser,一次掉电后,重启出现权限问题,而且filebrowser的核显驱动不支持amd的VA-API 因为用不上核显驱动,解压缩功能也用不上,官方版本的filebrowser还小巧一些,18m左右 安装的时候总是…

LeetCode 热题 100 JavaScript --226. 翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 3&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 提示&#xff1a; 树中节点数目范围在 [0, 100] 内 -100 < Node.val < 100 var invertTree function(root…

Element-ui中分页器的使用

<template>中写&#xff1a; js中写&#xff1a;

基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ................................................................ % 设置训练选项options …

On Evaluation of Embodied Navigation Agents 论文阅读

论文信息 题目&#xff1a;On Evaluation of Embodied Navigation Agents 作者&#xff1a;Peter Anderson&#xff0c;Angel Chang 来源&#xff1a;arXiv 时间&#xff1a;2018 Abstract 过去两年&#xff0c;导航方面的创造性工作激增。这种创造性的输出产生了大量有时不…