启动选择音频页
private var mCurrentAudioUrl: String? = null
private var audioFilePath: String? = null;
val intent =Intent(Intent.ACTION_GET_CONTENT, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
intent.setDataAndType(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, "audio
监听音频选择结果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == mSelectAudioRequest && resultCode == RESULT_OK) {
if (data !== null) {
audioFilePath = getFilePath(this, data.data!!)
if (!MediaFileTypeUtil().isAudioFileType(audioFilePath.toString())) {
ToastUtils.showToast("请选择音频文件", 500)
return
}
mCurrentAudioUrl = data.data.toString()
mCurrentAudio = object : AudioEntity {
override val audioUrl: String
get() = mCurrentAudioUrl!!
override val audioId: String
get() = ""
}
}
}
}
fun getFilePath(context: Context, uri: Uri): String? {
try {
val returnCursor: Cursor? =
context.getContentResolver().query(uri, null, null, null, null)
val nameIndex: Int = returnCursor!!.getColumnIndex(OpenableColumns.DISPLAY_NAME)
returnCursor.moveToFirst()
val name: String = returnCursor.getString(nameIndex)
val file = File(context.getFilesDir(), name)
val inputStream: InputStream? = context.getContentResolver().openInputStream(uri)
val outputStream = FileOutputStream(file)
var read = 0
val maxBufferSize = 1 * 1024 * 1024
val bytesAvailable: Int = inputStream!!.available()
val bufferSize = Math.min(bytesAvailable, maxBufferSize)
val buffers = ByteArray(bufferSize)
while (inputStream!!.read(buffers).also { read = it } != -1) {
outputStream.write(buffers, 0, read)
}
returnCursor.close()
inputStream.close()
outputStream.close()
return file.getPath()
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
上传文件
fun uploadFile(){
if (!TextUtils.isEmpty(mCurrentAudioUrl)) {
val audioFile = File(audioFilePath!!)
val typeArr = audioFilePath!!.split(".")
val mediaType = typeArr[typeArr.size - 1]
val fileBody = RequestBody.create(
"audio/${mediaType}".toMediaTypeOrNull(),
audioFile
)
val builder = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("fileType", "2")
.addFormDataPart(
"videoName",
"${UserUtil.mUserInfo?.currentUser?.userId}0_${TimeUtils.getNowSecond()}"
)
.addFormDataPart("file", audioFilePath!!,fileBody)
.addFormDataPart(
"title",
"${UserUtil.mUserInfo?.currentUser?.userId}0_${TimeUtils.getNowSecond()}"
)
.addFormDataPart("description",binding.inputContent.text.toString())
val body: RequestBody = builder.build()
val service = ApiManager.initService(InteractionService::class.java, body)
ApiManager.request(
lifecycleScope,
service.uploadVideoAsync(),
this,
isShowDialog = true,
fail = {}
) {
if (it?.code == 200) {}
}
}
}
上传文件接口
@POST("url")
fun uploadVideoAsync() : Deferred<Response<BaseResponse<Any>>>
踩雷记录
- formData类型接口不能再写uploadVideoAsync(@Body map: Map<String,Any),可以写uploadVideoAsync(@QueryMap map:Map<String,Any>)
- 加入formData传参可以链式调用addFormDataPart(key, value)
- 传入文件的是addFormDataPart(key, fileName, requestBody)