android-从Base64中的给定URI将Dropbox上的PDF下载到电话中会导致无法读取的PDF损坏

android-从Base64中的给定URI将Dropbox上的PDF下载到电话中会导致无法读取的PDF损坏,第1张

概述我从不同的来源(电话,Google驱动器等本地)获取PDF的URI,对于Dropbox,我可以使用URI作为输入来读取字节数组.但是我得到的PDF不是有效的PDF. Base64也不正确.这是我的URI:内容://com.dropbox.android.FileCache/filecache/a54cc030-e2e0-4ef5-8e72-0ac3269a1

我从不同的来源(电话,Google驱动器等本地)获取pdf的URI,对于DropBox,我可以使用URI作为输入来读取字节数组.但是我得到的pdf不是有效的pdf. Base64也不正确.

这是我的URI:

内容://com.dropBox.android.fileCache/filecache/a54cc030-e2e0-4ef5-8e72-0ac3269a16e1

val inputStream = context.contentResolver.openinputStream(Uri.parse(uri))val allText = inputStream.bufferedReader().use(BufferedReader::readText)val base64Image = Base64.encodetoString(allText.toByteArray(),Base64.DEFAulT)

allText内容(摘要):

%pdf-1.3%���������4 0 obj<< /Length 5 0 R /Filter /FlateDecode >>...13025%%EOF

当存储带有.pdf扩展名的allText内容时,该功能不起作用.

格式看起来不错,但是当在https://base64.guru/converter/decode/pdf中插入base64Image时,表明它是不正确的.

pdf原始内容(摘要):

2550 4446 2d31 2e33 0a25 c4e5 f2e5 eba7f3a0 d0c4 c60a 3420 3020 6f62 6a0a 3c3c....0a73 7461 7274 7872 6566 0a31 3330 32350a25 2545 4f46 0a
最佳答案

“I can read a byte array using the URI as input. But the pdf that I’m getting is not a valID pdf.”

“When storing the allText content with .pdf extension doesn’t work.”

您正在读取pdf输入字节(十六进制)并将其存储为错误的格式(文本).
例如,所有有效的pdf文件都应以字节25 50 44 46开头.您的allText内容片段以%pdf开头,%pdf是这些字节的转换后的ASCII / UTF文本表示形式.

问题:
所有这些都很好,因为我们可以将文本字符转换回各自的字节值,对吗?不,并非所有字节值都可以从文本格式正确恢复.

范例1:可以转换…

input bytes : 25 50 44 46as text     : %  P  D  Finto bytes  : 25 50 44 46

示例#2:无法转换(由于这些字节没有文本字符,因此无法恢复原始数据)…

input bytes : 25 C4 E5 F2 E5 EB A7 F3 A0 D0as text     : %  � � � �  � � � � � into bytes  : 25 00 00 00 00 00 00 00 00 00

解:

尝试以下类似的方法.您需要逻辑,如代码注释中所述…

import java.io.fileimport java.io.inputStreamfun main(args: Array<String>) {    //# setup access to your file...    var infile :inputStream = file("your-file-path-here.pdf")    var fileSize :Int = file(path).length()    //# read file bytes into a bytes Array...    var inStream :inputStream = infile.inputStream()    var inBytes :ByteArray = inStream.readBytes()    //# Make as String (of hex values)...    //var hexString :String = ""    val hexString = ""    for (b in inBytes) { hexString = String.format("%02X",b) }    //# check values as hex... should print: 25     //print(hexString) //Could be long print-out for a big file    //# Make Base64 string...    val base64 = Base64.getEncoder().encodetoString(inBytes)}

“Base64 is also not correct.”

(选项1)

尝试将上述示例代码中的hexString转换为Base64(注意:现在已添加为val base64).

(选项2)

使用简单的…直接将文件字节读取为Base64字符串

val bytes = file(filePath).readBytes()val base64 = Base64.getEncoder().encodetoString(bytes)
总结

以上是内存溢出为你收集整理的android-从Base64中的给定URI将Dropbox上的PDF下载到电话中会导致无法读取的PDF损坏 全部内容,希望文章能够帮你解决android-从Base64中的给定URI将Dropbox上的PDF下载到电话中会导致无法读取的PDF损坏 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1145020.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存