gpt4 book ai didi

android - 如何从文件 URI 获取 base64?

转载 作者:行者123 更新时间:2023-11-29 22:52:18 24 4
gpt4 key购买 nike

一般来说,我的任务是从所选文件中获取 base64。为了打开文件浏览器,我调用了以下函数:

private fun showFileBrowser() {
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.setType("*/*")
startActivityForResult(intent, FILE_CHOOSE_REQUEST_CODE)
}

打开成功。选择某个文件时,将调用 onActivityResult。在这里:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)

if (requestCode == FILE_CHOOSE_REQUEST_CODE) {
// not that data.data is Uri
if(data != null && data.data != null) {
val encodedBase64 = getBase64FromPath(data.data.path)
print(encodedBase64)
}


}

}

下面是我如何将 File 转换为 base64:

 private fun getBase64FromPath(path: String): String {

try {
val bytes = File(path).readBytes()

return Base64.encodeToString(bytes, Base64.DEFAULT)
} catch (error: IOException) {
error.printStackTrace() // This exception always occurs
}

}

似乎我做的一切都正确,但我得到了 FileNotFoundException。我不知道这是什么原因。我没有添加任何权限,因为我不想写任何害怕的东西,我只是想让用户选择一个文件,我将把它转换成 base64 并发送到服务器。那么,我的代码有什么问题?

最佳答案

my task is to get base64 from chosen file

您的代码与文件无关。 ACTION_GET_CONTENT 不仅限于设备上的文件,更不用说您可以访问的文件系统上的文件了。

When some file is chosen, onActivityResult is called

您通过 onActivityResult() 获得一个 UriUri 不是文件,Uri 上的 getPath() 仅当该 Uri 的方案时才有意义> 是 文件。大多数 Uri 值都有一个 content 方案。

将您的函数替换为:

private fun getBase64ForUriAndPossiblyCrash(uri: Uri): String {

try {
val bytes = contentResolver.openInputStream(uri).readBytes()

return Base64.encodeToString(bytes, Base64.DEFAULT)
} catch (error: IOException) {
error.printStackTrace() // This exception always occurs
}

函数名的AndPossiblyCrash部分是因为如果内容太大,你会用完内存。另请注意,您是在主应用程序线程上执行此工作,因此在您读入时您的 UI 将被卡住。

关于android - 如何从文件 URI 获取 base64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com