软件设计扛把子-oss上传图片使用手册

首先在build.gradle(Module)中实现

implementation 'com.aliyun.dpa:oss-android-sdk:+'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'

然后在Manifest中加上

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

这些配置完后就可以使用Oss上传了
这里我封装了一个工具类,具体代码如下
(这里的ACCESS_ID和ACCESS_KEY千万不能泄露!!!!!)

import android.content.Context
import android.util.Log
import com.alibaba.sdk.android.oss.ClientConfiguration
import com.alibaba.sdk.android.oss.ClientException
import com.alibaba.sdk.android.oss.OSSClient
import com.alibaba.sdk.android.oss.ServiceException
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider
import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider
import com.alibaba.sdk.android.oss.model.PutObjectRequest

class OssUpload {
    
    
    fun doUpload(context: Context,objectKey: String,uploadFilePath: String){
    
    
        // ACCESS_ID,ACCESS_KEY是在阿里云申请的
        //以下信息绝密,不可外泄!!!!!
        val credentialProvider: OSSCredentialProvider = OSSPlainTextAKSKCredentialProvider(ACCESS_ID,ACCESS_KEY)
        val conf = ClientConfiguration()
        conf.connectionTimeout = 15 * 1000 // 连接超时,默认15秒
        conf.socketTimeout = 15 * 1000 // socket超时,默认15秒
        conf.maxConcurrentRequest = 8 // 最大并发请求数,默认5个
        conf.maxErrorRetry = 2 // 失败后最大重试次数,默认2次

        // OSS_ENDPOINT是一个OSS区域地址
        var oss = OSSClient(context, "http://oss-cn-beijing.aliyuncs.com", credentialProvider, conf)
        //Log.v("cx","---------2")
        // 构造上传请求
        val put = PutObjectRequest("bucket-ljh", objectKey, uploadFilePath)

        try {
    
    
            val putResult = oss.putObject(put)//进行文件上传

        } catch (e: ClientException) {
    
    
            // 本地异常如网络异常等
            e.printStackTrace()
        } catch (e: ServiceException) {
    
    
            // 服务异常
            Log.e("RequestId", e.requestId)
            Log.e("ErrorCode", e.errorCode)
            Log.e("HostId", e.hostId)
            Log.e("RawMessage", e.rawMessage)
        }
    }

}

这个类是上传文件的类。一共就只有一个方法,即doUpload()。里面有三个参数。
第一个是上下文,一般如果在MainActivity调用就传this即可。
第二个参数是文件上传到Oss后,保存的名称。
第三个参数是文件在手机本地的路径。
比如我这里使用一下,就是

var ossUpload = OssUpload()
ossUpload.doUpload(this,"Eliminate_holidays/myImg.jpg",externalCacheDir.toString()+"/test.png")

这里,"Eliminate_holidays/myImg.jpg" 的意思是我的oss存储器上有个Eliminate_holidays文件夹,然后我把我的图片以myImg.jpg的名称(key)上传到oss中。然后这张图片保存的路径就是第三个参数。
在这里插入图片描述
在这里插入图片描述
这样我在oss存储器中创建了多个文件夹,用来保存不同类型的文件。
在这里插入图片描述
使用原理和刚刚那个例子一样。然后图片命名的时候一定要规范,知道是谁的照片。
然后图片就可以上传了。

猜你喜欢

转载自blog.csdn.net/afdafvdaa/article/details/110383081