IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android上传阿里云oss图片或者文件Util -> 正文阅读

[移动开发]Android上传阿里云oss图片或者文件Util


public class OssServiceUtil {
    private OSS oss;
    private picResultCallback callback;//回调接口
    public OssServiceUtil(String bucketname, String endpoint, OssData data) {
        this.bucketname =bucketname;
        this.endpoint = endpoint;
        OssData cansh = data;
        this.accessKeyId = cansh.getAccessKeyId();
        this.securityToken = cansh.getSecurityToken();
        this.accessKeySecret = cansh.getAccessKeySecret();
        this.init();
    }
    //初始化使用参数
    String accessKeyId,securityToken,accessKeySecret,endpoint,bucketname;
    private void init() {
        this.init(null);
    }
    private interface Cb {
        void success();
        void error();
    }
    private void init(Cb cb) {
                OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
                //这个初始化安全性没有Sts安全,如需要很高安全性建议用OSSStsTokenCredentialProvider创建(上一行创建方式)多出的参数SecurityToken为临时授权参数
                //        OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret);
                ClientConfiguration conf = new ClientConfiguration();
                conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
                conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
                conf.setMaxConcurrentRequest(8); // 最大并发请求数,默认5个
                conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
                // oss为全局变量,endpoint是一个OSS区域地址
                oss = new OSSClient(MyApplication.getInstance(), endpoint, credentialProvider, conf);
    }

    public void setResultCallBack(picResultCallback callback) {
        this.callback = callback;
    }

    public void upload(final List<File> file){
        if (oss == null) {
            this.init(new Cb() {
                @Override
                public void success() {
                    up(file);
                }
                @Override
                public void error() {
                    MyUtils.show("上传失败");
                    if (callback != null) {
                        callback.getPicData(null);
                    }
                }
            });
            return;
        }
        up(file);
    }

    private void up(List<File> files) {
        final int count = files.size();
        final List<String> results = new ArrayList<String>(count);
        final List<String> r = new ArrayList<String>();
        for (File file : files) {
            results.add("");
            final int index = files.indexOf(file);
            ObjectMetadata objectMeta = new ObjectMetadata();
            objectMeta.setContentType("image/jpeg");
            // 构造上传请求
            // 这里的objectKey其实就是服务器上的路径,即目录+文件名
            //因为目录命名逻辑涉及公司信息,被我删去,造成不知道这个objectKey不知为何物,如下是我们公司的大致命名逻辑
            //String objectKey = keyPath + "/" + carArr[times] + ".jpg";
            PutObjectRequest put = new PutObjectRequest(bucketname, file.getName(),file.getPath());
            put.setMetadata(objectMeta);
            try {
                PutObjectResult putObjectResult = oss.putObject(put);
            } catch (ClientException e) {
                e.printStackTrace();
                if (callback != null) {
                    callback.getPicData(null);
                }
            } catch (ServiceException e) {
                e.printStackTrace();
                if (callback != null) {
                    callback.getPicData(null);
                }
            }

            // 异步上传时可以设置进度回调
            put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
                @Override
                public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
                    // 在这里可以实现进度条展现功能
                    Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
                }
            });
            oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
                @Override
                public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                    Log.d("PutObject", "UploadSuccess");
                    Log.d("ETag", result.getETag());
                    Log.d("RequestId", result.getRequestId());
                    //上传后获取地址:
                    String prefix = "https://" + bucketname + "."+endpoint+ "/";
                    Log.d("prefix得值", prefix);
                    String fileUrl = prefix + request.getObjectKey();
                    results.set(index, fileUrl);
                    r.add("");
                    if (r.size() == count && callback != null) {
                        callback.getPicData(results);
                    }
                }

                @Override
                public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                    // 请求异常
                    if (clientExcepion != null) {
                        // 本地异常如网络异常等
                        clientExcepion.printStackTrace();
                    }
                    if (serviceException != null) {
                        // 服务异常
                        Log.e("ErrorCode", serviceException.getErrorCode());
                        Log.e("RequestId", serviceException.getRequestId());
                        Log.e("HostId", serviceException.getHostId());
                        Log.e("RawMessage", serviceException.getRawMessage());
                    }
                    MyUtils.show( "图片上传失败,请重新上传");
                    if (callback != null) {
                        callback.getPicData(null);
                    }
                    return;
                }
            });
        }
    }
    public void upFile(final File file){
        if (oss == null) {
            this.init(new Cb() {
                @Override
                public void success() {
                    UploadFile(file);
                }
                @Override
                public void error() {
                    MyUtils.show("上传失败");
                    if (callback != null) {
                        callback.getPicData(null);
                    }
                }
            });
            return;
        }
        UploadFile(file);
    }
    public void UploadFile(File file) {
        List<String> url=new ArrayList<>();
//        credentialProvider = new OSSStsTokenCredentialProvider(AccessKeyId, SecretKeyId, SecurityToken);
//        conf = new ClientConfiguration();
//        conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
//        conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
//        conf.setMaxConcurrentRequest(5); // 最大并发请求数,默认5个
//        conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
//        oss = new OSSClient(context, endpoint, credentialProvider, conf);

        // 构造上传请求。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketname, file.getName(), file.getPath());

        // 异步上传时可以设置进度回调。
        putObjectRequest.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {

            }
        });

        OSSAsyncTask ossAsyncTask = oss.asyncPutObject(putObjectRequest, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                url.clear();
                url.add(oss.presignPublicObjectURL(bucketname,file.getName()));
                callback.getPicData(url);
            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                // 请求异常。
                if (clientExcepion != null) {
                    // 本地异常,如网络异常等。
                    clientExcepion.printStackTrace();
                    MyUtils.show("网络异常");
                }
                if (serviceException != null) {
                    // 服务异常。
                    MyUtils.show("服务异常");
                }
            }
        });

        // ossAsyncTask.cancel(); // 可以取消任务
        // ossAsyncTask.waitUntilFinished(); // 等待任务完成
    }

    public interface picResultCallback {
        void getPicData(List<String> path);
    }
}

使用时
getBucket getEndpoint 都是后台返回的

 ossServiceUtil = new OssServiceUtil(data.getBucket(), data.getEndpoint(), data);
   ossServiceUtil.setResultCallBack(new OssServiceUtil.picResultCallback() {
            @Override
            public void getPicData(List<String> path) {
                if (path != null && path.size() != 0) {
                  //返回的地址回调
              
                }
            }
        });
        ossServiceUtil.upFile(mAudioFile);
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:39:08  更:2022-03-08 22:39:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:41:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码