android递归压缩上传多张图片到七牛的实例代码

yizhihongxing

针对这个话题,我们来一步步详细讲解下面的内容:

什么是递归压缩上传?

递归压缩上传就是将需要上传的多张图片按照递归的方式一张张压缩并上传到云存储服务中。这种方式可以避免手机内存不足的问题,并且可以节省上传时间和流量。

如何使用七牛云存储服务?

首先,要使用七牛云存储服务,我们需要注册账号,创建一个存储空间,并且在Android项目中导入七牛SDK。

dependencies {
    compile 'com.qiniu:qiniu-android-sdk:7.2.5'
}

然后,我们需要获取一个上传管理器对象,并且配置一些上传的策略参数。

// 创建上传管理器对象
UploadManager uploadManager = new UploadManager();

// 设置上传策略参数
String ak = "AccessKey"; // 这里填写你的AccessKey
String sk = "SecretKey"; // 这里填写你的SecretKey
String bucketName = "BucketName"; // 这里填写你的BucketName
Auth auth = Auth.create(ak, sk);
String upToken = auth.uploadToken(bucketName);

怎么实现递归压缩上传?

接下来我们来实现递归压缩上传。我们要上传的图片都存储在一个List集合中,首先我们需要判断这个集合是否为空,如果为空则直接返回。

if (mImageList == null || mImageList.size() == 0) {
    return;
}

如果不为空,则取出集合中的第一张图片,进行压缩和上传。

File imageFile = new File(mImageList.get(0));
String imagePath = imageFile.getAbsolutePath();
File compressedImageFile = compressImage(imageFile);
String compressedImagePath = compressedImageFile.getAbsolutePath();
String key = UUID.randomUUID().toString() + ".jpg";

接下来,我们需要将压缩后的图片上传到七牛云存储服务中,并且上传成功后要从List集合中删除这张图片。

uploadManager.put(compressedImagePath, key, upToken, new UpCompletionHandler() {
    @Override
    public void complete(String key, ResponseInfo info, JSONObject response) {
        // 上传完成后的逻辑处理
        if (info.isOK()) {
            mImageList.remove(0); // 上传成功后,从集合中删除这张图片
            recursiveUploadImage(); // 继续递归上传下一张图片
        }
    }
}, null);

最后,我们需要在递归中调用这个方法,完成所有图片的上传。

private void recursiveUploadImage() {
    if (mImageList == null || mImageList.size() == 0) {
        return;
    }
    File imageFile = new File(mImageList.get(0));
    String imagePath = imageFile.getAbsolutePath();
    File compressedImageFile = compressImage(imageFile);
    String compressedImagePath = compressedImageFile.getAbsolutePath();
    String key = UUID.randomUUID().toString() + ".jpg";
    uploadManager.put(compressedImagePath, key, upToken, new UpCompletionHandler() {
        @Override
        public void complete(String key, ResponseInfo info, JSONObject response) {
            // 上传完成后的逻辑处理
            if (info.isOK()) {
                mImageList.remove(0); // 上传成功后,从集合中删除这张图片
                recursiveUploadImage(); // 继续递归上传下一张图片
            }
        }
    }, null);
}

示例说明一:上传多张图片

private List<String> mImageList = new ArrayList<String>();

private void uploadImages() {
    // 向mImageList中添加需要上传的图片路径
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103808.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103810.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103812.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103814.jpg");
    mImageList.add("/storage/emulated/0/DCIM/Camera/IMG_20190902_103816.jpg");

    recursiveUploadImage();
}

示例说明二:启动上传

Button uploadButton = findViewById(R.id.uploadButton);
uploadButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        uploadImages();
    }
});

至此,递归压缩上传多张图片到七牛的实例代码的完整攻略就介绍完毕了,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android递归压缩上传多张图片到七牛的实例代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • premiere多个素材怎么进行嵌套?

    Premiere多个素材的嵌套攻略 在Adobe Premiere Pro中,嵌套是一种将多个素材组合在一起的方法,以便更方便地进行编辑和处理。下面是一个详细的攻略,介绍如何在Premiere中嵌套多个素材。 步骤1:创建一个新的序列 首先,打开Premiere并创建一个新的序列。在菜单栏中选择“文件(File)”>“新建(New)”>“序列(S…

    other 2023年7月27日
    00
  • 假设检验(hypothesistesting)

    假设检验(hypothesis testing) 在统计学中,假设检验(hypothesis testing)是一种用来检验、评估某个假设是否成立的方法。在假设检验中,我们会建立一个零假设(null hypothesis),然后寻找足够的证据来判断是否需要拒绝这个假设。 零假设(null hypothesis)和备择假设(alternative hypoth…

    其他 2023年3月28日
    00
  • teamfoundationserver基本功能

    Team Foundation Server基本功能 Team Foundation Server(TFS)是一种用于软件开发和应用生命周期管理的全面解决方案。它提供了一组关键功能,包括版本控制、质量管理、项目和团队协作、构建和部署自动化等等。在本文中,我们将着重介绍TFS的基本功能。 版本控制 TFS提供了一种有效的版本控制系统,可帮助软件团队协同开发。团…

    其他 2023年3月29日
    00
  • centos7.0安装

    CentOS 7.0 安装教程 CentOS是一个从Red Hat Enterprise Linux(RHEL)编译而来的开源操作系统,具有更长的支持周期、更大的软件仓库和更好的稳定性。本篇文章将为大家提供CentOS 7.0的安装教程。 下载CentOS 7.0镜像 首先,我们需要从官网下载CentOS 7.0的镜像文件。可以从如下链接下载最新的CentO…

    其他 2023年3月28日
    00
  • cnpm不是内部命令的解决方案:配置环境变量【推荐】

    下面是“cnpm不是内部命令”的解决方案:配置环境变量。 问题描述 在使用npm安装依赖包时,有时候会出现像下面这样的提示: ‘cnpm’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 这是因为cnpm并不是npm自带的命令,而是需要额外进行安装的。而如果我们每次都需要在命令行中使用npm install -g cnpm来安装cnpm,则使用起来非…

    other 2023年6月26日
    00
  • FreeRTOS进阶之任务创建完全解析

    FreeRTOS进阶之任务创建完全解析 本文章将从以下几个方面对FreeRTOS中任务的创建进行完整解析: 任务创建的基本流程 常见任务创建函数参数的解释 示例1:创建一个简单的任务 示例2:创建多个任务 1. 任务创建的基本流程 FreeRTOS中任务创建的基本流程如下: 确定任务的名称、优先级和入口函数。 调用任务创建函数创建任务。 在任务入口函数中编写…

    other 2023年6月20日
    00
  • Go语言字符串常见操作的使用汇总

    Go语言字符串常见操作的使用汇总 字符串基础 字符串是由一系列字符组成的,一般用来表示文本的信息。 在Go语言中,字符串属于基础数据类型,使用双引号”或反引号`来定义。其基础定义如下: // 使用双引号定义 str1 := "Hello, world!" // 使用反引号定义 str2 := `Hello, world!` 字符串常见操作…

    other 2023年6月20日
    00
  • 7z命令行详解

    以下是“7z命令行详解的完整攻略”的详细讲解,过程中包含两个示例说明的标准Markdown格式文本: 7z命令行详解的完整攻略 7z是一款开源的压缩软件,支持多种压缩格式。本文将介绍如何使用7z命令行进行压缩和解压缩操作,并提供一些常用的命令示例。 1. 压缩文件 1.1 压缩单个文件 我们可以使用以下命令将单个文件压为7z格式: 7z a -t7z fil…

    other 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部