美文网首页Android开发
Android开发阿里云OSS上传文件

Android开发阿里云OSS上传文件

作者: 你的益达233 | 来源:发表于2020-12-29 16:31 被阅读0次

配置就不说了,给出关键代码

需求

我的上传文件是上传视频

一、初始化OSS

override fun setAuthenResultData(data: BaseResponse<UploadCourseAuthBean>) {
    //LogUtil.json("Acheng", data.data.toString())
    //OSSCredentialProvider credentialProvider;
    var credentialProvider: OSSCredentialProvider
    //使用自己的获取STSToken的类
    credentialProvider = OSSStsTokenCredentialProvider(data.data?.AccessKeyId, data.data?.AccessKeySecret, data.data?.SecurityToken)
    val conf = ClientConfiguration()
    conf.connectionTimeout = 15 * 1000 // 连接超时,默认15秒

    conf.socketTimeout = 15 * 1000 // socket超时,默认15秒

    conf.maxConcurrentRequest = 5 // 最大并发请求书,默认5个

    conf.maxErrorRetry = 2 // 失败后最大重试次数,默认2次

    mOss = OSSClient(applicationContext, endpoint, credentialProvider, conf)

}

endpoint:也是接口返回的

二、onActivityResult接收选择了的视频

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode != Activity.RESULT_OK) return
    when (requestCode) {
        PictureConfig.CHOOSE_REQUEST -> {
            
            if (!PictureSelector.obtainMultipleResult(data).isNullOrEmpty()){
                videoURL = PictureSelector.obtainMultipleResult(data)[0].path
                ViewUtils.visibility(dct_sc_course,false)
                ViewUtils.visibility(cl_select_video_info,true)
                tv_sc_video_title.text = UtilHelper.getStrFileName(videoURL)

                //选择完视频就上传
                var fileName = videoURL!!.substring(videoURL!!.lastIndexOf("."))
                var folderName = UtilHelper.getCurrentDate3()
                var currentTime = System.currentTimeMillis()
                var finalName = "${SPUtils.getUid()}_${currentTime}${fileName}"
                asyncPutImage(bucketName, "${folderName}/$finalName", "$videoURL")

               
            }
        }

关键是asyncPutImage方法,第一个参数bucketName是接口返回的配置信息,第二个是上传上去的文件名,第三个是文件路径

3、关键上传视频方法

private fun asyncPutImage(mBucket: String, `object`: String, localFile: String) {

    val upload_start = System.currentTimeMillis()
    if (`object` == "") {
        return
    }
    val file = File(localFile)
    if (!file.exists()) {
        return
    }
    // 构造上传请求
    val put = PutObjectRequest(mBucket, `object`, localFile)
    put.crC64 = OSSRequest.CRC64Config.YES
    if (mCallbackAddress != null) { // 传入对应的上传回调参数,这里默认使用OSS提供的公共测试回调服务器地址
        put.callbackParam = object : HashMap<String?, String?>() {
            init {
                put("callbackUrl", mCallbackAddress)
                //callbackBody可以自定义传入的信息
                put("callbackBody", "filename=${`object`}")
            }
        }
    }
    // 异步上传时可以设置进度回调
    put.progressCallback = OSSProgressCallback { request, currentSize, totalSize ->
        var progress = (100 * currentSize / totalSize).toInt()
        //更新上传中进度条
        updateProgress(progress)

    }
     task = mOss!!.asyncPutObject(put, object : OSSCompletedCallback<PutObjectRequest, PutObjectResult> {
        override fun onSuccess(request: PutObjectRequest, result: PutObjectResult) {
            LogUtil.json("Acheng", "上传结果" + result.serverCallbackReturnBody)
            val jsonObject = JSONObject(result.serverCallbackReturnBody)
            var resultUrl = jsonObject.getString("body")
            uploadVideo = resultUrl.replace("filename=", videoHost)
            LogUtil.json("Acheng", uploadVideo)
            //上传完成,关闭上传中进度条
            val mes = handler.obtainMessage(2, null)
            mes.sendToTarget()
            val upload_end = System.currentTimeMillis()
            OSSLog.logDebug("upload cost: " + (upload_end - upload_start) / 1000f)


        }

        override fun onFailure(request: PutObjectRequest, clientExcepion: ClientException, serviceException: ServiceException) {
            var info = ""
            // 请求异常
            if (clientExcepion != null) { // 本地异常如网络异常等
                clientExcepion.printStackTrace()
                info = clientExcepion.toString()
                Log.d("Acheng", "本地异常如网络异常等$info")
            }
            if (serviceException != null) { // 服务异常
                info = serviceException.toString()
                Log.d("Acheng", "服务异常$info")
            }

        }
    })


}

上传完得到的uploadVideo为了后面传给app服务器,以后服务器去这个地址就能访问出视频文件

至此OSS上传文件就完成,上面有些方法,变量没有的,可以注释掉。
有问题的请私信,或者评论

相关文章

  • 阿里云OSS图片上传实践

    目前公司里的项目用到的文件管理服务都是阿里云OSS,下面介绍下Android端上传图片到阿里云OSS的具体实践。 ...

  • Android开发阿里云OSS上传文件

    配置就不说了,给出关键代码 需求 我的上传文件是上传视频 一、初始化OSS endpoint:也是接口返回的 二、...

  • http jar 冲突导致oss上传失败

    使用oss上传文件到阿里云oss报错: While executing [invoke] encountered ...

  • android 阿里云OSS文件上传

    估计有小伙伴看到阿里云oss的api文档十脸懵逼了,啊哈哈哈,接下来博主就来拯救你了,看完觉得好的就关注博主吧,么...

  • 文件上传

    背景 在实际开发中,我们经常会使用到文件上传功能,特在此总结常用的文件上传,我们常用的长传是阿里云OSS、七牛云、...

  • 文件上传的实现方式

    常见的文件上传方式 阿里云上传 阿里云直传oss(不经过中间服务器中转) 配置项options checkpoin...

  • OSS上传文件

    阿里云OSS上传文件[https://help.aliyun.com/document_detail/32058....

  • Vue上传文件到OSS并校验文件的md5值

    Vue上传文件到OSS并校验文件的md5值 最近在做的项目中需要在Vue中上传文件到阿里云OSS,还需要在上传之前...

  • Android OSS上传图片到阿里云

    Android OSS上传图片到阿里云 我所采取的上传方式为异步上传,如果需要多张图片的话,可以直接循环上传就可...

  • 阿里云OSS上传文件

    项目中使用到上传文件功能,网上搜索了下选择使用阿里云oss上传,查看官方文档。账号配置: 上传 OK!开始上传,发...

网友评论

    本文标题:Android开发阿里云OSS上传文件

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