|
|
|
@ -3,26 +3,30 @@ package com.yinuo.safetywatcher.watcher.net
|
|
|
|
|
import com.common.commonlib.net.BaseObserve
|
|
|
|
|
import com.common.commonlib.net.bean.BaseResponse
|
|
|
|
|
import com.common.commonlib.net.callback.RequestResultCallBack
|
|
|
|
|
import com.yinuo.safetywatcher.watcher.utils.LztekUtil
|
|
|
|
|
import io.reactivex.rxjava3.core.Observable
|
|
|
|
|
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
|
|
|
|
import okhttp3.MultipartBody
|
|
|
|
|
import okhttp3.RequestBody
|
|
|
|
|
import okhttp3.RequestBody.Companion.asRequestBody
|
|
|
|
|
import okhttp3.RequestBody.Companion.toRequestBody
|
|
|
|
|
import retrofit2.http.Headers
|
|
|
|
|
import retrofit2.http.Multipart
|
|
|
|
|
import retrofit2.http.POST
|
|
|
|
|
import retrofit2.http.Part
|
|
|
|
|
import retrofit2.http.PartMap
|
|
|
|
|
import java.io.File
|
|
|
|
|
|
|
|
|
|
const val FORM_DATA = "multipart/form-data";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 文件上传
|
|
|
|
|
*/
|
|
|
|
|
class UploadFileApi : BaseObserve<UploadFileApi.Api>(Api::class.java) {
|
|
|
|
|
|
|
|
|
|
open fun singleUpload(path: String) {
|
|
|
|
|
open fun singleUpload(path: String, videoTime: Long) {
|
|
|
|
|
observe(
|
|
|
|
|
api.singleUpload(makeMultipartBodyPart(path)),
|
|
|
|
|
api.singleUpload(makeParamsMaps(videoTime), makeFileBodyPart(path)),
|
|
|
|
|
object : RequestResultCallBack<BaseResponse>() {
|
|
|
|
|
override fun onResult(result: BaseResponse) {
|
|
|
|
|
}
|
|
|
|
@ -32,45 +36,30 @@ class UploadFileApi : BaseObserve<UploadFileApi.Api>(Api::class.java) {
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
open fun multiUpload(paths: List<String>) {
|
|
|
|
|
observe(
|
|
|
|
|
api.multiUpload(makefileMaps(paths)),
|
|
|
|
|
object : RequestResultCallBack<BaseResponse>() {
|
|
|
|
|
override fun onResult(result: BaseResponse) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onError(error: String?) {
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface Api {
|
|
|
|
|
@Headers("baseurl:host")
|
|
|
|
|
@Multipart
|
|
|
|
|
@POST("xxx/upload")
|
|
|
|
|
fun singleUpload(@Part file: MultipartBody.Part?): Observable<BaseResponse>
|
|
|
|
|
|
|
|
|
|
@Multipart
|
|
|
|
|
@POST("xxx/uploads")
|
|
|
|
|
fun multiUpload(@PartMap fileMap: Map<String, MultipartBody.Part>): Observable<BaseResponse>
|
|
|
|
|
@POST("/common/uploadVideo")
|
|
|
|
|
fun singleUpload(
|
|
|
|
|
@PartMap params: Map<String, @JvmSuppressWildcards RequestBody>,
|
|
|
|
|
@Part file: MultipartBody.Part
|
|
|
|
|
): Observable<BaseResponse>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun makefileMaps(paths: List<String>): Map<String, MultipartBody.Part> {
|
|
|
|
|
val map = HashMap<String, MultipartBody.Part>()
|
|
|
|
|
paths.forEach {
|
|
|
|
|
val file = File(it)
|
|
|
|
|
val part = makeMultipartBodyPart(it)
|
|
|
|
|
map["file; filename=${file.name}"] = part
|
|
|
|
|
}
|
|
|
|
|
return map
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun makeMultipartBodyPart(path: String): MultipartBody.Part {
|
|
|
|
|
private fun makeFileBodyPart(path: String): MultipartBody.Part {
|
|
|
|
|
val file = File(path)
|
|
|
|
|
//构建requestbody
|
|
|
|
|
//构建requestBody
|
|
|
|
|
val requestFile: RequestBody =
|
|
|
|
|
file.asRequestBody("multipart/form-data".toMediaTypeOrNull())
|
|
|
|
|
//将resquestbody封装为MultipartBody.Part对象
|
|
|
|
|
file.asRequestBody(FORM_DATA.toMediaTypeOrNull())
|
|
|
|
|
//将requestBody封装为MultipartBody.Part对象
|
|
|
|
|
return MultipartBody.Part.createFormData("file", file.name, requestFile)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun makeParamsMaps(videoTime: Long): Map<String, RequestBody> {
|
|
|
|
|
val map = HashMap<String, RequestBody>()
|
|
|
|
|
map["deviceSn"] = LztekUtil.getSn().toRequestBody(FORM_DATA.toMediaTypeOrNull())
|
|
|
|
|
map["videoTime"] =
|
|
|
|
|
videoTime.toString().toRequestBody(FORM_DATA.toMediaTypeOrNull())
|
|
|
|
|
return map
|
|
|
|
|
}
|
|
|
|
|
}
|