Commit 3ff46ea1 authored by yinjiacheng's avatar yinjiacheng

add: 接入金山云对象存储SDK

parent aa698b33
......@@ -75,4 +75,5 @@ dependencies {
implementation 'com.yidian.chameleon:annotation:0.3.29'
kapt 'com.yidian.chameleon:annotationcompiler:0.3.29'
implementation files('libs/meglive_still.aar')
implementation files('libs/ks3-androidsdk-1.4.9.jar')
}
\ No newline at end of file
......@@ -47,6 +47,7 @@ import com.yidian.shenghuoquan.newscontent.ui.mine.MineActivity
import com.yidian.shenghuoquan.newscontent.ui.mine.SubscriptionActivity
import com.yidian.shenghuoquan.newscontent.ui.search.SearchChannelActivity
import com.yidian.shenghuoquan.newscontent.ui.search.SearchResultPageActivity
import com.yidian.shenghuoquan.newscontent.utils.Ks3Core
import com.yidian.xpage.XPageManager
import com.yidian.xpage.node.XPageHandler
import com.yidian.xpage.node.XPageNode
......@@ -64,6 +65,7 @@ class NewsContentApplication : YdBaseApplication() {
initVideo()
initChameleon()
initChameleonService()
initKs3Core()
}
}
......@@ -313,6 +315,10 @@ class NewsContentApplication : YdBaseApplication() {
PlayerFactory.setPlayManager(CustomPlayerManager::class.java)
}
private fun initKs3Core() {
Ks3Core.instance.init(this)
}
override fun onTerminate() {
super.onTerminate()
ChameleonServiceManager.unregisterAllChameleonService()
......
package com.yidian.shenghuoquan.newscontent.utils
import android.content.Context
import android.util.Log
import com.ksyun.ks3.exception.Ks3Error
import com.ksyun.ks3.model.acl.CannedAccessControlList
import com.ksyun.ks3.services.AuthListener
import com.ksyun.ks3.services.Ks3Client
import com.ksyun.ks3.services.Ks3ClientConfiguration
import com.ksyun.ks3.services.handler.PutObjectACLResponseHandler
import com.ksyun.ks3.services.handler.PutObjectResponseHandler
import com.ksyun.ks3.services.request.PutObjectRequest
import com.yidian.common.utils.EncryptUtil
import cz.msebera.android.httpclient.Header
import java.io.File
/**
* author: yinjiacheng
* date: 5/20/21 11:08 AM
* description: 金山云存储
*/
class Ks3Core private constructor() : AuthListener {
private lateinit var client: Ks3Client
private lateinit var putObjectResponseHandler: PutObjectResponseHandler
private lateinit var putObjectACLResponseHandler: PutObjectACLResponseHandler
private val onKs3UploadListenerList: ArrayList<OnKs3UploadListener> by lazy { ArrayList<OnKs3UploadListener>() }
companion object {
const val TAG = "Ks3Core"
const val BUCKET_NAME = "bp-yidian"
const val END_POINT = "ks3-cn-beijing.ksyun.com"
val instance: Ks3Core by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Ks3Core()
}
}
/**
* 初始化
*/
fun init(context: Context) {
initClient(context)
initListener()
}
private fun initClient(context: Context) {
client = Ks3Client(this, context)
client.setConfiguration(Ks3ClientConfiguration.getDefaultConfiguration())
client.setEndpoint(END_POINT)
}
private fun initListener() {
putObjectResponseHandler = object : PutObjectResponseHandler() {
override fun onTaskProgress(progress: Double) {
// work thread
if (onKs3UploadListenerList.size > 0) {
for (listener in onKs3UploadListenerList) {
listener.onUploadProgress(progress)
}
}
}
override fun onTaskFailure(
statesCode: Int,
error: Ks3Error?,
responceHeaders: Array<out Header>?,
response: String?,
throwable: Throwable?
) {
Log.e(TAG, "put object fail:, errorMsg: ${error?.errorMessage}")
if (onKs3UploadListenerList.size > 0) {
for (listener in onKs3UploadListenerList) {
listener.onUploadFailure(error?.errorMessage)
}
}
}
override fun onTaskSuccess(statesCode: Int, responceHeaders: Array<out Header>?) {
Log.d(TAG, "put object success.")
if (onKs3UploadListenerList.size > 0) {
for (listener in onKs3UploadListenerList) {
listener.onUploadSuccess()
}
}
}
override fun onTaskStart() {
if (onKs3UploadListenerList.size > 0) {
for (listener in onKs3UploadListenerList) {
listener.onUploadStart()
}
}
}
override fun onTaskFinish() {
if (onKs3UploadListenerList.size > 0) {
for (listener in onKs3UploadListenerList) {
listener.onUploadFinish()
}
}
}
override fun onTaskCancel() {
if (onKs3UploadListenerList.size > 0) {
for (listener in onKs3UploadListenerList) {
listener.onUploadCancel()
}
}
}
}
putObjectACLResponseHandler = object : PutObjectACLResponseHandler() {
override fun onSuccess(statesCode: Int, responceHeaders: Array<out Header>?) {
Log.d(TAG, "put object acl success.")
}
override fun onFailure(
statesCode: Int,
error: Ks3Error?,
responceHeaders: Array<out Header>?,
response: String?,
throwable: Throwable?
) {
Log.e(TAG, "put object acl fail:, errorMsg: ${error?.errorMessage}")
}
}
}
/**
* 文件上传
* @param filePath 本地文件全路径
*/
/*fun uploadFile(filePath: String) {
client.putObject(
BUCKET_NAME,
EncryptUtil.getMD5(filePath),
File(filePath),
putObjectResponseHandler
)
}*/
/**
* 文件上传
* @param filePath 本地文件全路径
*/
fun uploadFile(filePath: String) {
val request = PutObjectRequest(BUCKET_NAME, EncryptUtil.getMD5(filePath), File(filePath))
request.cannedAcl = CannedAccessControlList.PublicRead
client.putObject(request, putObjectResponseHandler)
}
/**
* 为已存在于bucket中的object设置访问控制权限
*/
private fun putObjectACL(filePath: String) {
val controlList = CannedAccessControlList.PublicRead
client.putObjectACL(
BUCKET_NAME,
EncryptUtil.getMD5(filePath),
controlList,
putObjectACLResponseHandler
)
}
override fun onCalculateAuth(
httpMethod: String?,
ContentType: String?,
Date: String?,
ContentMD5: String?,
Resource: String?,
Headers: String?
): String {
// 此处应由APP端向业务服务器发送post请求返回Token
// 需要注意该回调方法运行在非主线程
Log.d(
TAG,
"httpMethod: $httpMethod, ContentType: $ContentType, Date: $Date, ContentMD5: $ContentMD5, Resource: $Resource, Headers: $Headers"
)
return ""
}
fun addOnKs3UploadListener(listener: OnKs3UploadListener) {
if (!onKs3UploadListenerList.contains(listener)) {
onKs3UploadListenerList.add(listener)
}
}
fun removeOnKs3UploadListener(listener: OnKs3UploadListener) {
onKs3UploadListenerList.remove(listener)
}
interface OnKs3UploadListener {
fun onUploadStart()
fun onUploadProgress(progress: Double)
fun onUploadFinish()
fun onUploadCancel()
fun onUploadSuccess()
fun onUploadFailure(message: String?)
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url "https://dl.bintray.com/thelasterstar/maven/" }
maven { url 'https://repo1.maven.org/maven2/' }
......@@ -25,6 +26,7 @@ allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url "https://dl.bintray.com/thelasterstar/maven/" }
maven { url "http://dailybuild2.yidian-inc.com:8088/repository/maven-public/" }
......
......@@ -60,7 +60,9 @@ ext.dependencies = [
'io.reactivex.rxjava3:rxjava:3.0.9',
'com.yidian.framework.mobile:ydhttp:1.0.8-SNAPSHOT',
'com.yidian.framework.mobile:ydutils:1.0.1-SNAPSHOT',
'com.yidian.framework.mobile:xdiamond:1.0.2-SNAPSHOT'
'com.yidian.framework.mobile:xdiamond:1.0.2-SNAPSHOT',
'com.loopj.android:android-async-http:1.4.9'
],
other:[
':CommonLib:Common'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment