//uri转MultipartBody.Part
fun Uri.asPart(name:String,context: Context):MultipartBody.Part{
val contentResolver = context.contentResolver
val displayName = run {
val cursor = contentResolver.query(this, null, null, null, null)
cursor?.let {
if(it.moveToFirst())
it.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME))
else null
}
}?:"${System.currentTimeMillis()}.${MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(this))}"
return MultipartBody.Part.createFormData(name,displayName, asRequestBody(context))
}
//uri转requestBody
fun Uri.asRequestBody(context:Context):RequestBody = object :RequestBody(){
override fun contentType(): MediaType = MediaType.get(getMimeType(context))
override fun writeTo(sink: BufferedSink) {
val ips = context.contentResolver.openInputStream(this@asRequestBody)
ips?.let { sink.writeAll(Buffer().readFrom(it,contentLength())) }
}
override fun contentLength(): Long = context.contentResolver.openFileDescriptor(this@asRequestBody,"r")?.statSize?:0L
}
//返回文件的mimetype
fun Uri.getMimeType(context: Context) = context.contentResolver.getType(this)?:"multipart/form-data"
本文地址:https://blog.csdn.net/jingzz1/article/details/108577319
黄山市民网:https://www.huangshanshimin.com/