美文网首页
安卓批量上传图片到七牛的两种方法

安卓批量上传图片到七牛的两种方法

作者: liuweilyy | 来源:发表于2019-03-01 11:12 被阅读0次

七牛批量上传

安装七牛SDK,因为我们项目需要每个文件必须要一个token,也可以获取一个token然后客户端自己用拼接key
注:如果自己拼接key最后是时间戳加上图片的下标,不然容易因为上传时间过快导致时间戳一样,造成上传失败。当初写iOS上传自己拼接key的时候遇到过这个问题。
创建一个工具类QiNiuUploadUtil,
初始化七牛的上传工具类UploadManager
然后创建回调接口QiNiuUploadCompletionHandler

    private static UploadManager uploadManager = new UploadManager();
    private ArrayList<String> pathList = new ArrayList<>();
    //记录当前图片下标
    private int imageIndex;
    //用于上传数据集合的时候回调
    private QiNiuUploadCompletionHandler completionHandler;

    public void setCompletionHandler(QiNiuUploadCompletionHandler completionHandler) {
        this.completionHandler = completionHandler;
    }

上传单个文件

public void uploadSingle(final String path, int type, final String dataType, final QiNiuUploadCompletionHandler handler){
        //自己写的请求七牛token方法,因为我们项目需要每一个文件必须要一个token。
        HttpClient.getQiniuToken(type, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
            @Override
            public void onSuccess(JSONObject response) {

                final QiniuBean qiniuBean = new Gson().fromJson(response.toString(), QiniuBean.class);

                final String key = qiniuBean.getKey() + "." + dataType;
                //调用七牛上传方法
                uploadManager.put(path, key, qiniuBean.getToken(),
                        new UpCompletionHandler() {
                            @Override
                            public void complete(String s, ResponseInfo responseInfo, JSONObject jsonObject) {
                                if (responseInfo.isOK()) {
                                    if (handler != null){
                                        String path = qiniuBean.getDomain() + "/" + key;
                                        handler.uploadSuccess(path,null);
                                    }

                                } else {
                                    if (handler != null){
                                        handler.uploadFailure();
                                    }
                                }
                            }
                        },null);
            }

            @Override
            public void onFault(String errorMsg) {
                if (handler != null){
                    handler.uploadFailure();
                }
            }
        }));
    }

第一种上传多个文件,用递归方法

因为本项目图片多选都用PictureSelector选择器所提上传图片数组 类型为LocalMedia,这个根据自己项目来改

public void uploadImageArray(final List<LocalMedia> imageArray,final int index){

        imageIndex = index;

        if (index == imageArray.size()){
            if (completionHandler != null){

                completionHandler.uploadSuccess(null, pathList);
            }
        }else {
            //获取token
            HttpClient.getQiniuToken(0, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
                @Override
                public void onSuccess(final JSONObject response) {
                    final QiniuBean qiniuBean = new Gson().fromJson(response.toString(), QiniuBean.class);
                    LocalMedia localMedia = imageArray.get(index);
                    final String key = qiniuBean.getKey() + "." + localMedia.getPictureType();
                    //调用七牛上传图片API
                    uploadManager.put(localMedia.getPath(), key, qiniuBean.getToken(),
                            new UpCompletionHandler() {
                                @Override
                                public void complete(String s, ResponseInfo responseInfo, JSONObject jsonObject) {

                                    if (responseInfo.isOK()) {
                                        String path = qiniuBean.getDomain() + "/" + key;
                                        pathList.add(path);
                                        imageIndex++;
                                        uploadImageArray(imageArray, imageIndex);

                                    } else {
                                        if (completionHandler != null){
                                            completionHandler.uploadFailure();
                                        }
                                    }
                                }
                            },null);
                }

                @Override
                public void onFault(String errorMsg) {
                    if (completionHandler != null){
                        completionHandler.uploadFailure();
                    }
                }
            }));
        }
    }

回调接口

public interface QiNiuUploadCompletionHandler{
        //上传数组时候list有值,单个上传时候path有值
        void uploadSuccess(String path, ArrayList<String> paths);
        void uploadFailure();
    }

第二种用循环上传

/**
     * 上传图片数组 类型为LocalMedia,因为本项目图片多选都用PictureSelector选择器
     * @param imageArray 图片数组
     * @param index
     *
     */
    public void uploadImageArray(final List<LocalMedia> imageArray, final int index){

        imageIndex = index;

        for (final LocalMedia localMedia : imageArray){
            //自己写的请求七牛token方法,因为我们项目需要每一个文件必须要一个token。
            HttpClient.getQiniuToken(0, new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {
                @Override
                public void onSuccess(final JSONObject response) {
                    final QiniuBean qiniuBean = new Gson().fromJson(response.toString(), QiniuBean.class);

                    final String key = qiniuBean.getKey() + "." + localMedia.getPictureType();
                    //调用七牛上传图片API
                    uploadManager.put(localMedia.getCompressPath(), key, qiniuBean.getToken(),
                            new UpCompletionHandler() {
                                @Override
                                public void complete(String s, ResponseInfo responseInfo, JSONObject jsonObject) {

                                    if (responseInfo.isOK()) {
                                        String path = qiniuBean.getDomain() + "/" + key;
                                        pathList.add(path);
                                        imageIndex++;
                                        //如果成功的次数等于数组个数测表示全部上传成功
                                        if (imageIndex == imageArray.size()){
                                            if (completionHandler != null){
                                                completionHandler.uploadSuccess(null, pathList);
                                            }
                                        }

                                    } else {
                                        if (completionHandler != null){
                                            completionHandler.uploadFailure();
                                        }
                                    }
                                }
                            },null);
                }

                @Override
                public void onFault(ErrorBean errorMsg) {
                    if (completionHandler != null){
                        completionHandler.uploadFailure();
                    }
                }
            }));
        }
    }

相关文章

  • 安卓批量上传图片到七牛的两种方法

    七牛批量上传 安装七牛SDK,因为我们项目需要每个文件必须要一个token,也可以获取一个token然后客户端自己...

  • 提高上传效率,iOS图片压缩总结

    最近项目中用到七牛上传图片,多张上传时,png图片大,上传极慢,特地研究了一下图片压缩的方法。 两种压缩图片的方法...

  • 七牛云 token获取工具分享

    以前写安卓使用到了七牛进行图片上传获取外链,在网上搜索token的获取方法,都没有一个可靠一点的,各种模拟获取to...

  • 七牛批量上传图片iOS

    因客户要求,在APP中的图片都是从七牛的服务器中获取的,所以所有的上传图片也要上传到七牛上.又因为服务器不做批量上...

  • 安卓:七牛之简单上传图片

    最近项目用到七牛了,之前只是听过却没有用过,今天正好掀起它的盖头来,本篇文章只是简单的上传单张图片,至于以后的详细...

  • 七牛云图片上传

    七牛云图片上传 可查看七牛云上传图片的SDK

  • 七牛云上传图片

    1请求后端接口获取上传凭证2请求七牛云地址上传图片到七牛云3上传完毕将获得七牛云返回的图片地址http://www...

  • js 百度编辑器 图片上传

    图片上传方案: 目前来说,Web端基于七牛等云存储的图片上传方式分为以下两种: 上传图片至服务端,再将数据转发至七...

  • (iOS)七牛批量上传图片

    由于七牛没有批量上传的方法,找了很多博客,最终完成了批量上传,发篇文章记录一下借鉴了这位朋友的大部分代码 http...

  • ThinkPHP6上传图片七牛云 如何上传文件到七牛云对象储存c

    ThinkPHP6如何上传图片七牛云,如何上传文件到七牛云对象储存cos,总所周知图片是特别消耗网站带宽的,个人网...

网友评论

      本文标题:安卓批量上传图片到七牛的两种方法

      本文链接:https://www.haomeiwen.com/subject/yggruqtx.html