android 上传oss 简单上传 - Go语言中文社区

android 上传oss 简单上传


/**
*endpoint 
accessKeyId  阿里云自己申请的
accessKeySecret 阿里云自己申请的
token 后台生成
*/



public class OssManager extends BaseMvpActivity{
    private OSS oss;
    private UpLoadPhotoActivity mContext;
    public static String objectKey;
    public static OssManager getInstance() {
        return OssInstance.instance;
    }

    @Override
    public IPresenter createPresenter() {
        return null;
    }

    private static class OssInstance {
        private static final OssManager instance = new OssManager();
    }

    private OssManager() {
    }


    /**
     * 初始化
     **/
    public OssManager init(Context context, String endpoint, String accessKeyId, String accessKeySecret, String token) {
        mContext = (UpLoadPhotoActivity)context;
        if (oss == null) {
            LogUtils.e("TAG", "accessKeyId=" + accessKeyId);
            LogUtils.e("TAG", "accessKeySecret=" + accessKeySecret);
            LogUtils.e("TAG", "token=" + token);
            OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, token);
            ClientConfiguration conf = new ClientConfiguration();
            conf.setConnectionTimeout(15 * 1000); // 连接超时, 默认15秒
            conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
            conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
            conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次

            OSSClient ossClient = new OSSClient(context, endpoint, credentialProvider, conf);
            oss = ossClient;
            LogUtils.e("aaaaaa", "初始化完毕");
            OSSLog.enableLog();
        }
        return OssInstance.instance;
    }


    /**
     * 普通上传,比如image
     **/
    OSSAsyncTask task;

    public void upload(String name, String filePath) {
        mContext.showDialog();
//        LogUtils.e("aaaaname", name + ":" + filePath);
        // 指定数据类型,没有指定会自动根据后缀名判断
        final ObjectMetadata objectMeta = new ObjectMetadata();
        objectMeta.setContentType("image/jpeg");
        // 构造上传请求
        PutObjectRequest put = new PutObjectRequest("bucketName,上面有解释", name, filePath);
        put.setMetadata(objectMeta);
        // 异步上传时可以设置进度回调
        put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
            @Override
            public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
                Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
                int progress = (int) (100 * currentSize / totalSize);
                LogUtils.e("progress=====" + progress);
                if (progress==100){
                    mContext.hideDialog();
                }
            }
        });

        OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {



            @Override
            public void onSuccess(PutObjectRequest request, PutObjectResult result) {
                Log.d("PutObject", "UploadSuccess");
                objectKey = request.getObjectKey();
                LogUtils.e(objectKey);

                Log.d("ETag", result.getETag());
                Log.d("RequestId", result.getRequestId());
            }

            @Override
            public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
                LogUtils.e(clientExcepion.getMessage());
                String info = "";
                // 请求异常
                if (clientExcepion != null) {
                    // 本地异常如网络异常等
                    clientExcepion.printStackTrace();
                    info = clientExcepion.toString();
                    LogUtils.e(info);
                }
                if (serviceException != null) {
                    // 服务异常
                    Log.e("ErrorCode", serviceException.getErrorCode());
                    Log.e("RequestId", serviceException.getRequestId());
                    Log.e("HostId", serviceException.getHostId());
                    Log.e("RawMessage", serviceException.getRawMessage());
                    info = serviceException.toString();
                }
            }
        });
    }
    public static String getImageUrl(){
        return objectKey;
    }
}

这里附一张图,解释 endpoint 跟 bucketName 一看就明白了

 

然后再activity foresult 调用

//这里的选择图片是个框架,你可以使用自己习惯用的

// objectKey 这个是我们规定的图片名字规则

List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
if (selectList.size() > 0) {
    LocalMedia localMedia = selectList.get(0);
    String path1 = localMedia.getPath();
    File file = new File(path1);
    String name = file.getName();
    Glide.with(this).load(path1).into(ivId);
    String objectKey = "此处就不显示了,文件目录" + "/" +
            UserManager.getInstance().getUserInfo().getId() +
            UUID.randomUUID().toString().replace("-", "")+"_front_" + name;
    OssManager.getInstance().init(this, Constants.TEST, accessKeyId, accessKeySecret, securityToken);
    OssManager.getInstance().upload(objectKey,path1);
    String imageUrl = OssManager.getImageUrl();
    if (!StringUtils.isEmpty(imageUrl)){
        photo1 = baseUrl+imageUrl;
    }else {
        ToastUtils.showShort("上传失败,请重新上传");
    }
}

 

随手做个记录,若有意见或建议,忘提出

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39738488/article/details/84830671
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 03:52:49
  • 阅读 ( 605 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢