我有一个应用程序,用户从文件浏览器选择一个pdf文件,然后我需要将该pdf文件转换为base64格式。
以下是我的代码,用于将pdf转换为base64:
private fun convertImageFileToBase64(imageFile: File?): String {
return FileInputStream(imageFile).use { inputStream ->
ByteArrayOutputStream().use { outputStream ->
Base64OutputStream(outputStream, Base64.DEFAULT).use { base64FilterStream ->
inputStream.copyTo(base64FilterStream)
base64FilterStream.flush()
outputStream.toString()
}
}
}
}
因此,在获取PDF文件的onActivityResult
中,我编写了以下代码:
launch {
withContext(Dispatchers.IO) {
generatedBase64 = convertImageFileToBase64(file)
}
//upload generatedBase64 to server
}
但是,如果 PDF 文件很大,代码将在主线程上运行而不是在后台线程上运行,我的 UI 会冻结一段时间。我也尝试过 AsyncTask 并尝试在 doInBackground
方法中执行转换,但我遇到了相同的问题。
Dispatchers.Main + Job()
。如果是这样,在你放置注释“上传生成的Base64到服务器”的地方,它将在主线程上运行。你需要像调用convertImageFileToBase64
函数一样切换上下文。 - Sergio