Android - OSS批量上传工具类

这是一篇关于 上传oss图片的工具类,单张上传很简单,关键在于批量上传图片,对于有这方面需求的同学,应该会有所帮助。

老规矩 官方文档:OSS的兼容性和SDK源码_对象存储(OSS)-阿里云帮助中心,里面有详细说明,对应如何构建单张图片上传。

背景:测试说:“小程序支持多图上传,为啥安卓不支持?”。 ok 我们也支持一下

图片批量上传过程拆解:

1、图片批量选择

2、图片批量压缩

3、图片批量上传

这里重点是 步骤2、3的汇总。步骤1可以自行选择。

步骤1:

采用三方插件:

GitHub - LuckSiege/PictureSelector: Picture Selector Library for Android or 图片选择器
PictureSelector.create()等方法选择图片,这里可以去官方库学习了解。

从步骤1获得 本地图片列表:List<LocalMedia> result

LocalMedia :可以自己定义,包含 localPath 就行。

然后进行步骤2 批量压缩,这里采用的是Luban批量压缩:

private void compressImages(List<LocalMedia> localMediaList,String BUCKET_NAME) {
        if(localMediaList == null || localMediaList.size()<1) {
            return;
        }
        List<String> compressList = new ArrayList<>();
        Luban.with(SolApplication.getInstance())
                .load(getFilesPath(localMediaList))
                .ignoreBy(500)
                .filter(new CompressionPredicate() {
                    @Override
                    public boolean apply(String path) {
                        return PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path);
                    }
                })
//                .setRenameListener(new OnRenameListener() {
//                    @Override
//                    public String rename(String filePath) {
//                        LdwLogUtil.e("压缩重命名:" + filePath);
//                        return null;
//                    }
//                })
                .setCompressListener(new OnCompressListener() {
                    @Override
                    public void onStart() {
                    }

                    @Override
                    public void onSuccess(int index, File file) {
                        LogUtil.e(index+"压缩成功:" + file.getAbsolutePath());
                        compressList.add(file.getAbsolutePath());
                        if(index == localMediaList.size()-1) {
                            finalTenderOssSigneUpList = new ArrayList<>();
                            asyncListPutImage(compressList,BUCKET_NAME,initOssClent());
                        }
                    }

                    @Override
                    public void onError(int index, Throwable e) {
                        Message mes = handler.obtainMessage(3, null);
                        handler.sendMessage(mes);
                        LogUtil.e("压缩失败" );
                    }
                }).launch();
    }

压缩提一个点:可以点进源码看看具体啥时候会走压缩失败的回调,会有惊喜!也会影响你写代码的逻辑

批量压缩完成后就开始步骤3,批量上传,采用的是递归的办法:

    private OSS initOssClent () {
        OSSCredentialProvider credentialProvider = new MyOSSAuthCredentialsProvider(stsServer);
        conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
        conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
        conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
        conf.setMaxErrorRetry(2); //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值