You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:14:57