Android中Content URI转PDF/Word/Excel为Base64的Kotlin实现求助
Android Content URI转Base64字符串(Kotlin)
直接通过ContentResolver读取URI对应的输入流,再编码为Base64即可解决问题,核心实现如下:
工具函数实现
import android.content.ContentResolver import android.net.Uri import android.util.Base64 import java.io.IOException fun Uri.toBase64(contentResolver: ContentResolver): String? { return runCatching { contentResolver.openInputStream(this)?.use { inputStream -> val bytes = inputStream.readBytes() Base64.encodeToString(bytes, Base64.DEFAULT) } }.onFailure { it.printStackTrace() }.getOrNull() }
使用示例
在Activity/Fragment中直接调用:
// 替换为你获取到的目标Content URI val targetUri: Uri = Uri.parse("content://com.android.providers.media.documents/document/document%3A1000095307") val base64Str = targetUri.toBase64(contentResolver) base64Str?.let { // 处理转换后的Base64字符串 }
关键说明
- 流安全处理:用
use关键字自动关闭输入流,避免资源泄漏。 - Base64格式选择:
Base64.DEFAULT会生成带换行的字符串,若需无换行格式,替换为Base64.NO_WRAP。 - 权限要求:通过系统文件选择器(
ACTION_OPEN_DOCUMENT)获取的URI,Android 10+无需额外权限;低版本需提前申请READ_EXTERNAL_STORAGE权限。 - 大文件优化:若文件超过100MB,直接读取字节数组可能引发OOM,建议分块读取编码,或考虑避免转换为Base64(Base64会让体积增加约30%)。
内容的提问来源于stack exchange,提问作者Rahul Routh
相关产品推荐
相关产品推荐

