打造高效上传体验:基于Kotlin的Android快速上传框架

1. 引言

在Android开发中,文件上传操作常常面临各种挑战,为此我开源了一个高效、易用的快速上传框架,助力开发者轻松实现文件上传功能。 GitHub项目地址: 点我

2. 框架特点概述

  • 纯Kotlin编写:简洁、现代的编程语言。
  • MVVM架构:利用ViewModel、LiveData和Lifecycle组件。
  • 高效的协程:异步处理上传任务,保证界面流畅。
  • OkHttp封装:稳定可靠的HTTP请求处理。

3. 效果预览

单文件上传模式单文件上传模式多个文件上传多个文件同时上传模式
单文件上传模式单文件上传模式多个文件上传多个文件同时上传模式

4. 快速开始

依赖配置

  • 添加仓库
// build.gradle(Project:)
allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}
  • 添加依赖
// build.gradle(Module:)
dependencies {
    implementation 'com.github.XJ-Up:quickupload:1.0.0'
}

5.详细使用说明

第一步 Application进行初始化配置

//defaultNotificationChannel用于后台服务需自行createNotificationChannel详情见demo(startForegroundService)
//debug 用于是否打印日志
 UploadConfiguration.initialize(
            context = this,
            defaultNotificationChannel = notificationChannelID,
            debug = BuildConfig.DEBUG
        )

第二步 创建并启动上传任务(可分开)

单文件
//单文件
     QuickUploadRequest(this, serverUrl = "你的上传地址")
                    .setMethod("POST")
                    .addFileToUpload(
                        filePath = mPath, //文件地址(注意:content://也行哦)
                        parameterName = "files" //后台服务接收的参数名
                    )
                    .setResumedFileStart(0)//如果需要断点续传调用此方法,默认情况下不需要调用
                    .setUploadID("1")
                    .startUpload()
多文件同时上传
//同时多文件(不支持断点续传)
 QuickUploadRequest(this, serverUrl = "你的上传地址")
                    .setMethod("POST")
                    .apply {
                        filePath.forEachIndexed { index, s ->
                            addFileToUpload(
                                filePath = s,
                                parameterName = "files"
                            )
                        }
                    }
                    .setUploadID("2")
                    .startUpload()
断点续传
   //如果需要断点续传调用此方法,默认情况下不需要调用(注意:0或不传效果都是重新上传,此方法必须在startUpload之前调用)
   //参数传入上次断点位置(一般这个位置通过后台服务器获取)
   quickUploadRequest.setResumedFileStart(0)
                  

第三步 监听上传获取上传详情

   RequestLiveData(this,object :RequestObserverDelegate{
            override fun onCompleted(context: Context, uploadInfo: UploadInfo) {
                //上传完成时调用 ,注意:成功或错误都会触发
            }

            override fun onCompletedWhileNotObserving() {
                //仅在监听单个上传ID并注册请求观察者时调用
            }

            override fun onError(context: Context, uploadInfo: UploadInfo, exception: Throwable) {
                //出现异常时
            }

            override fun onProgress(context: Context, uploadInfo: UploadInfo) {
                //上传中进度
            }

            override fun onSuccess(
                context: Context,
                uploadInfo: UploadInfo,
                serverResponse: ServerResponse
            ) {
                //上传成功时
            }

            override fun onWait(context: Context, uploadInfo: UploadInfo) {
                //加入上传队列,但不一定开始上传时
            }
        })

自定义日志

     	    Logger.setDelegate(object : Logger.Ext{
           override fun debug(component: String, uploadId: String, message: String) {
              
           }

           override fun error(
               component: String,
               uploadId: String,
               message: String,
               exception: Throwable?
           ) {
              
           }

           override fun info(component: String, uploadId: String, message: String) {
              
           }

       })

配置或管理 API

        quickUploadRequest.addArrayParameter()//将具有多个值的参数添加到此上传请求中
        quickUploadRequest.addHeader()//向此上传请求添加标头
        quickUploadRequest.addParameter()//为该上传请求添加一个参数
        quickUploadRequest.setMethod()//设置要使用的HTTP方法
        quickUploadRequest.setMaxRetries()//设置发生错误时库将尝试的最大重试次数
        quickUploadRequest.setAutoDeleteFilesAfterSuccessfulUpload()//设置上传成功后自动删除文件
        quickUploadRequest.setUploadID()//设置上传id



        UploadConfiguration.dispatcher= //设置自定义调度器
        UploadConfiguration.maxConcurrentTasks=//设置最大并发任务数
        UploadConfiguration.retryPolicy=//设置上传服务重试策略 
        UploadConfiguration.defaultNotificationChannel=//设置通知通道
        

具体使用可参考demo

GitHub项目地址: 点我

6.常见问题解答

  • 如何处理上传失败?
    **当上传失败时 RequestLiveData中的 onError 会触发,通过exception参数获取异常信息 ,常见的异常:
    UserCancelledUploadException 用户已取消上传的异常
    UploadError 上传过程错误的异常
    NoNetworkException 网络连接断开的异常。它们都继承Throwable。通过判断异常决定后续处理 **
  • 如何取消上传任务?
UploadService.taskList//获取当前所有活跃的上传任务
UploadService.stopAllUploads()//停止所有活动的上传任务。onError触发。
UploadService.stopUpload(uploadId)//停止特定上传任务
UploadService.stop(context)//如果当前没有正在运行的任务,则停止 UploadService
UploadService.stop(context, forceStop = true) //强制停止 UploadService 中止任何当前正在运行的任务
  • 如何获取上传进度?
    **当上传失败时 RequestLiveData中的 onProgress 会触发,通过 uploadInfo.progressPercent获取 **

7.结语

**希望这个框架能帮助你简化上传任务,提高开发效率。如果你有任何问题或建议,欢迎在GitHub点我上提出Issue或提交Pull Request。让我们一起打造更好的开源项目! **

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用依赖结构矩阵管理架构债务

本文讨论了如何利用依赖结构矩阵(DSM,Dependency Structure Matrix)管理和识别架构债务,并通过示例应用展示了这一过程。原文: Managing Architecture Debt with Dependency Structure Matrix Vlado Paunovic Unsplash 技术债务&a…

Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作[Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解]还在写0.0… 文章目录 系…

中国青年汽车研发仿真建模大赛“汽车系统建模仿真与科学计算赛道”,邀您来赛!

近日,由中国青年创业就业基金会、国家新能源汽车技术创新中心共同主办,中国汽车研发软件产业创新联盟承办、苏州同元软控信息技术有限公司(简称“同元软控”)等企业协办的首届中国青年汽车研发仿真建模大赛启动仪式在北京经开区拉…

精选免费在线工具与资源推荐20240531

精选免费在线工具与资源推荐 引言 在互联网高速发展的今天,我们身处一个信息爆炸的时代。为了更好地应对工作和学习中的挑战,我们时常需要借助各种工具和资源来提高效率。幸运的是,网络上存在着大量免费且高效的在线工具和资源,…

【算法】模拟算法——Z字形变换(medium)

题解:模拟算法——Z字形变换(medium) 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接:LINK 2.题解 利用模拟,来解决问题。 首先创建出一个O(numRows*n)的数组来,并按照题目要求把每个字符按顺序填进去。 这里以numRows…

【运维项目经历|026】Redis智能集群构建与性能优化工程

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

学习网站地址汇总

本文用于记录学习路上遇到问题,各位大神的分享笔记,内容包括数据库的安装卸载,基础使用,sql语句编写,计算机网络知识等,属于知识大杂烩 1.动态行转列:https://www.cnblogs.com/gaizai/p/375329…

AquaCrop农业水资源管理,模拟作物生长过程中水分的需求与消耗

AquaCrop是由世界粮食及农业组织(FAO)开发的一个先进模型,旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理,特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

S-RISE——解读人脸识别系统及其评估指标

1. 概述 过去十多年来,深度学习的突破性进展使图像识别任务(如图像分类、物体检测和人脸识别)取得了巨大进步。人脸识别技术的性能也有了显著提高,并吸引了全世界的关注,目前已被应用于移民控制和安防摄像头等多个领域…

了解m4s格式

正常在hls V7 和 DASH中都会使用m4s存放数据。他们使用fmp4的方式来存放信息: fmp4格式 : 一、hls V7介绍 1. 包含的文件: 2. prog_index.m3u8中 指明了 init.mp4与 上面各个.m4s文件的关系,具体内容为: 其中init.mp…

【期末速成】——计算机组成原理(1)概述

目录 一、什么是计算机的组成 二、冯诺依曼体系结构计算机的特点 三、计算机系统的层次结构 四、机器语言、汇编语言、高级语言, 五、 编译程序、解释程序、汇编程序 六、已知主频、CPI计算程序运行时间 一、什么是计算机的组成 计算机的组成可以分为五个部件和两个信息…

【C++ ——— 哈希】位图 | 布隆过滤器

文章目录 1、位图1.1位图概念 2.位图实现位图的应用1.一百亿个整数,设计算法找到只出现一次的整数?2.给两个文件,分别有一百亿个整数,我们只有1G内存该如何找到两个文件的交集?3.位图应用变形:一个文件有100亿个int&a…

什么是数据资产管理?数据资产管理包括了哪些内容?

数据资产管理包括数据模型管理、数据标准管理、数据质量管理等 10 个活动职能,覆盖数据资源化、数据资产化两个阶段。本章参考 PDCA 方法,从计划、执行、检查、改进四个环节着手,阐述数据资产管理活动职能的核心理念与实践要点。 一、数据模型…

RedisTemplate实战应用--队列等

一、RedisTemplate队列插入 1、从集合左边插入值 https://blog.csdn.net/weixin_43658899/article/details/121040307 leftPush(K key, V value) redisTemplate.opsForList().leftPush("leftdatakey","bbbb");2、从集合左边开始在v1值后边插入新值v2 le…

SG7050EEN差分晶体振荡器:为5G路由器提供卓越的时钟源

随着5G技术的快速发展,5G路由器作为连接高速网络的重要设备,正迅速普及。为了确保5G路由器在高宽带和低延迟的网络环境中表现出色,选择一款高性能的晶体振荡器至关重要。爱普生推出的SG7050EEN差分晶体振荡器,以其高精度、低相位噪…

Three.js 研究:4、创建设备底部旋转的科技感圆环

1、实现效果 2、PNG转SVG 2.1、原始物料 使用网站工具https://convertio.co/zh/png-svg/进行PNG转SVG 3、导入SVG至Blender 4、制作旋转动画 4.1、给圆环着色 4.2、修改圆环中心位置 4.3、让圆环旋转起来 参考一下文章 Three.js 研究:1、如何让物体动起来 Thre…

Java | Leetcode Java题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; class Solution {public int minimumTotal(List<List<Integer>> triangle) {int n triangle.size();int[] f new int[n];f[0] triangle.get(0).get(0);for (int i 1; i < n; i) {f[i] f[i - 1] triangle.get(i).get(i…

2024新版二开微信发卡小程序源码卡密系统流支持量主

2024新版二开微信发卡小程序源码卡密系统流支持量主。裂变扩展多种领取模式二次开发的发卡小程序源码&#xff0c;其后台采用PHP编写&#xff0c;支持用户通过付费购卡或者观看视频广告领取卡密&#xff0c;该小程序还支持流量主&#xff0c;因为功能需要&#xff0c;我就进行了…

汇舟问卷:国外问卷调查两小时赚28美金?

现在的年轻人不愿意打工的原因不只是因为累&#xff0c;而且赚的钱也不多。有些人开玩笑地说&#xff0c;摆个摊儿卖点小商品都比上班赚得多&#xff0c;这确实是事实。 打工只能勉强维持生计&#xff0c;不能致富。因此&#xff0c;如果我们想赚大钱&#xff0c;首先需要改变…

ChatGPT-4o在临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模中的应用

ChatGPT-4o在临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模中的应用 2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5&#xff0c;将人工智能的发展推向了一个新的高度。…