Oss上传

2023-11-06

package com.yazq.hszm.utils;

import android.content.Context;

import com.alibaba.sdk.android.oss.ClientConfiguration;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.OSS;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.ServiceException;
import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
import com.alibaba.sdk.android.oss.callback.OSSProgressCallback;
import com.alibaba.sdk.android.oss.common.OSSLog;
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider;
import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
import com.alibaba.sdk.android.oss.model.CompleteMultipartUploadResult;
import com.alibaba.sdk.android.oss.model.MultipartUploadRequest;
import com.alibaba.sdk.android.oss.model.OSSRequest;
import com.alibaba.sdk.android.oss.model.ObjectMetadata;
import com.alibaba.sdk.android.oss.model.PutObjectRequest;
import com.alibaba.sdk.android.oss.model.PutObjectResult;
import com.google.gson.Gson;
import com.tencent.mm.opensdk.utils.Log;
import com.yazq.hszm.network.ServerUrl;

public class OssService {

    private OSS oss;
    private String accessKeyId;
    private String bucketName;
    private String accessKeySecret;
    private String endpoint;
    private Context context;

    private ProgressCallback progressCallback;
    private ProgressCallback1 progressCallback1;
    private int type;

    public OssService(Context context, String accessKeyId, String accessKeySecret, String endpoint, String bucketName, int i) {
        this.context = context;
        this.endpoint = endpoint;
        this.bucketName = bucketName;
        this.accessKeyId = accessKeyId;
        this.accessKeySecret = accessKeySecret;
        this.type = i;
    }

    public void asyncMultipartUpload(String uploadKey, String uploadFilePath) {

        MultipartUploadRequest request = new MultipartUploadRequest(bucketName, uploadKey, uploadFilePath);
        request.setCRC64(OSSRequest.CRC64Config.YES);
        request.setProgressCallback(new OSSProgressCallback<MultipartUploadRequest>() {

            @Override
            public void onProgress(MultipartUploadRequest request, long currentSize, long totalSize) {
                OSSLog.logDebug("[testMultipartUpload] - " + currentSize + " " + totalSize, false);
                int progress = (int) (100 * currentSize / totalSize);
                android.util.Log.e("OSS=======", "onProgress: " + progress);
                // mDisplayer.updateProgress(progress);
                // mDisplayer.displayInfo("上传进度: " + String.valueOf(progress) + "%");
            }
        });
        oss.asyncMultipartUpload(request, new OSSCompletedCallback<MultipartUploadRequest, CompleteMultipartUploadResult>() {
            @Override
            public void onSuccess(MultipartUploadRequest request, CompleteMultipartUploadResult result) {
                // mDisplayer.uploadComplete();
                android.util.Log.e("OSS=======", "onSuccess: " + new Gson().toJson(request.toString()));
                // mDisplayer.displayInfo(request.toString());
            }

            @Override
            public void onFailure(MultipartUploadRequest request, ClientException clientException, ServiceException serviceException) {
                if (clientException != null) {
                    android.util.Log.e("OSS=======", "clientException: " + new Gson().toJson(clientException.toString()));
                    //   mDisplayer.displayInfo(clientException.toString());
                } else if (serviceException != null) {
                    android.util.Log.e("OSS=======", "serviceException: " + new Gson().toJson(serviceException.toString()));
                    // mDisplayer.displayInfo(serviceException.toString());
                }

            }
        });
    }

    public void setii(String localFilepath) {
        // 填写Bucket名称,例如examplebucket。
        String bucketName = ServerUrl.red_dream;
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = FileUtils.getfilename("", "");
// 填写本地文件完整路径,例如/storage/emulated/0/oss/examplefile.txt。
        //  String localFilepath = "/storage/emulated/0/oss/examplefile.txt";

        ObjectMetadata meta = new ObjectMetadata();
// 设置文件元信息等。
        meta.setHeader("x-oss-object-acl", "public-read-write");
        MultipartUploadRequest rq = new MultipartUploadRequest(bucketName, objectName, localFilepath, meta);
// 设置PartSize。PartSize默认值为256 KB,最小值为100 KB。
        rq.setPartSize(1024 * 1024);
        rq.setProgressCallback(new OSSProgressCallback<MultipartUploadRequest>() {
            @Override
            public void onProgress(MultipartUploadRequest request, long currentSize, long totalSize) {
                OSSLog.logDebug("[testMultipartUpload] - " + currentSize + " " + totalSize, false);
            }
        });

        try {
            CompleteMultipartUploadResult result = oss.multipartUpload(rq);
            if (progressCallback1 != null) {
                progressCallback1.onProgressonSuccessCallback(result, type);
            }

            android.util.Log.e("=========", "setii: " + result.getObjectKey() + "");
        } catch (ClientException e) {
            e.printStackTrace();
        } catch (ServiceException e) {
            e.printStackTrace();
        }
    }

    public void initOSSClient() {
        //OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.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(context, endpoint, credentialProvider, conf);


    }


    public void beginupload(Context context, String filename, String path) {
        //通过填写文件名形成objectname,通过这个名字指定上传和下载的文件
        String objectname = filename;
        if (objectname == null || objectname.equals("")) {
            //  ToastUtils.showShort("文件名不能为空");
            return;
        }
        //下面3个参数依次为bucket名,Object名,上传文件路径
        PutObjectRequest put = new PutObjectRequest(bucketName, objectname, path);
        if (path == null || path.equals("")) {
            // LogUtil.d("请选择图片....");
            //ToastUtils.showShort("请选择图片....");
            return;
        }
        Log.i("ccc", "正在上传中....");
        //ToastUtils.showShort("正在上传中....");
        // 异步上传,可以设置进度回调
        put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
                android.util.Log.e("oss", "onProgress: ");
                //LogUtil.d("currentSize: " + currentSize + " totalSize: " + totalSize);
                double progress = currentSize * 1.0 / totalSize * 100.f;
                android.util.Log.e("oss", "onProgress: " + progress);
                if (progressCallback != null) {
                    progressCallback.onProgressCallback(progress);
                }
            }
        });

        @SuppressWarnings("rawtypes")
        OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                android.util.Log.e("oss", "onSuccess: ");
                if (progressCallback != null) {
                    progressCallback.onProgressonSuccessCallback(request, result,type);
                }

                //ToastUtils.showShort("上传成功");
            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                android.util.Log.e("oss", "onFailure: ");
                // 请求异常
                /// LogUtil.d("UploadFailure");
                //  ToastUtils.showShort("UploadFailure");
                if (clientExcepion != null) {
                    // 本地异常如网络异常等
                    Log.i("sss", "UploadFailure:表示向OSS发送请求或解析来自OSS的响应时发生错误。\n" + "  *例如,当网络不可用时,这个异常将被抛出");
                    clientExcepion.printStackTrace();
                }
                if (serviceException != null) {
                    // 服务异常
                    Log.i("sss", "UploadFailure:表示在OSS服务端发生错误");
                    Log.i("sss", serviceException.getErrorCode());
                    Log.i("sss", serviceException.getRequestId());
                    Log.i("sss", serviceException.getHostId());
                    Log.i("sss", serviceException.getRawMessage());
                }
            }
        });
        //task.cancel(); // 可以取消任务
        //task.waitUntilFinished(); // 可以等待直到任务完成
    }


    public ProgressCallback getProgressCallback() {
        return progressCallback;
    }

    public ProgressCallback1 getProgressCallback1() {
        return progressCallback1;
    }

    public void setProgressCallback1(ProgressCallback1 progressCallback1) {
        this.progressCallback1 = progressCallback1;
    }

    public void setProgressCallback(ProgressCallback progressCallback) {
        this.progressCallback = progressCallback;
    }

    public interface ProgressCallback {
        void onProgressCallback(double progress);

        void onProgressonSuccessCallback(PutObjectRequest request, PutObjectResult result,int type);
    }

    public interface ProgressCallback1 {
        void onProgressCallback(double progress);

        void onProgressonSuccessCallback(CompleteMultipartUploadResult completeMultipartUploadResult, int id);
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oss上传 的相关文章

随机推荐

  • Pandas知识点-逻辑运算

    Pandas知识点 逻辑运算 逻辑运算在代码中基本是必不可少的 Pandas的逻辑运算与Python基础语法中的逻辑运算存在一些差异 所以本文介绍Pandas中的逻辑运算符和逻辑运算 本文使用的数据来源于网易财经 具体下载方法可以参考 ht
  • RuntimeError: CUDA error: initialization error when calling `cusparseCreate(handle)

    原代码 tf swingbase arm torch matmul torch inverse tf base upper torch inverse tf uppernew base 改成 tf swingbase arm torch m
  • vscode中终端字体设置

    整理了一些vscode中终端字体及各种样式的设定 废话不多说 看下面 把下面的粘贴到 setting json 中 根据个人需要可以更改样式 瞎搞的 大部分应该准确 自己调试出来的 workbench colorCustomizations
  • 沈阳师范大学C++ pta第三章 指针引用

    沈阳师范大学C pta第三章 指针引用 判断题 1 字符串常量实质上是一个指向该字符串首字符的指针常量 T 2 定义一个指针数组并初始化赋值若干个字符串常量 则指针数组并不存放这些字符串 而仅仅指向各个字符串 T 3 指向整数指针的指针与指
  • idea 配置详解 (二) 之editor 详解

    3 File Settings Editor 3 1 File Settings Editor General 3 1 1 File Settings Editor General Auto Import 3 1 2 File Settin
  • Qt应用开发(基础篇)——输入对话框 QInputDialog

    一 前言 QInputDialog类继承于QDialog 是一个简单方便的对话框 用于从用户获取单个值 对话框窗口 QDialog QInputDialog输入对话框带有一个文本标签 一个输入框和标准按钮 输入内容可以字符 数字和选项 文本
  • html 浏览器存储方式

    浏览器有三种本地存储方式 1 localstorage 2 sessionStorage 3 cookie 浏览器 F12 打开调试模式 可以看到 点击对应域名 可以看到当前域名下存储的数据 是以key value形式存储的 三种方式的共同
  • 自己动手开发编译器之参考博客

    http www cnblogs com Ninputer archive 2011 06 10 2077991 html 2588239 可以参考这个博客进行开发 加油哈
  • 短视频平台-小说推文(番茄小说)推广任务详情

    字节旗下平台 番茄小说 今日头条 抖音故事 抖音漫画官方每周只出一次数据 预计每周二出上周四之前的数据 有时官方回传数据较晚 会延迟到周三出 请达人知悉 注意 再次强调 番茄拉新规则 是以设备第一次下载番茄小说后搜的第一个别名为一个有效拉新
  • vue3实现 多个input框输入 自动聚焦下一个

    我最近要实现 车牌号输入框的功能 vant里有密码输入框 功能一样 但是vant只有数字键盘 不符合我的需求 所
  • java在注解中绑定方法参数的解决方案

    我们有这样子的需求 需要记录用户操作某个方法的信息并记录到日志里面 例如 用户在保存和更新任务的时候 我们需要记录下用户的ip 具体是保存还是更新 调用的是哪个方法 保存和更新的任务名称以及操作是否成功 这里最好的技术就是spring ao
  • scrapyd,scrapy部署

    Library Frameworks Python framework Versions 3 7 bin scrapyd deploy 23 ScrapyDeprecationWarning Module scrapy utils http
  • 腾讯AI战略详解:技术社会与创新图景

    来源 腾讯研究院 概要 11月8日上午 以 开放 创想 为主题的2017腾讯全球合作伙伴大会在成都开幕 11月8日上午 以 开放 创想 为主题的2017腾讯全球合作伙伴大会在成都开幕 来自全球的350位国内外顶级大咖 500家主流媒体 数万
  • jdbc oracle 需要jar,什么jdbc jar用于oracle 11g&jdk 1.6以及如何连接到db本身

    gt Oracle将Jar与Oracle客户端或服务器安装捆绑在一起 可以在 ORACLE HOME jdbc lib ojdbc6 jar中找到 我总是用那个 gt Driver类名是oracle jdbc OracleDriver UR
  • [JavaEE系列] Thread类的基本用法

    文章目录 线程创建 第一类 继承 Thread 类 继承 Thread 类 重写 run 方法 使用匿名内部类 继承 Thread 类 重写 run 方法 第二类 实现 Runnable 接口 实现 Runnable 接口 重写 run 方
  • 趣头条基于 Flink+ClickHouse 构建实时数据分析平台

    摘要 本文由趣头条数据平台负责人王金海分享 主要介绍趣头条 Flink to Hive 小时级场景和 Flink to ClickHouse 秒级场景 内容分为以下四部分 一 业务场景与现状分析 二 Flink to Hive 小时级场景
  • 小米红米利用安装徕卡相机(附安装包)

    在帖子里说用adb安装的过程 安装狮的教程在分享的包里 测试设备 小米12pro 准备 手机和电脑在一个局域网或者用数据线连接 准备好安装包 1 手机打开开发者选项 打开无线usb调试 老安卓设备可以用数据线连接 进入设置 我的设备 连续点
  • maven的命令-deploy

    maven deploy命令的含义 maven deploy命令是将你负责的模块发布到你配置的仓库位置 多模块开发中使用deploy命令 配置仓库位置 一般公司都会搭建自己的公司私服 用于加速获取jar以及管理公司的一些技术沉淀工具包之类的
  • go语言开发工具sublime text3 + gosublime配置

    开始go语言开发时 网上google了下go的开发工具 大都推荐 sublime text3 gosublime 但是实际操作中gosublime不能直接安装 需要自己手动安装 将自己的安装过程整理一下 1 sublime text 3安装
  • Oss上传

    package com yazq hszm utils import android content Context import com alibaba sdk android oss ClientConfiguration import