我有一个我正在处理的Android应用程序,现在我正在尝试从URI获取文件(我将使用意图从图库中获取图像然后上传它到使用Ion的node.js服务器。问题是它总是引发异常。我尝试调试并获得了Uri.toString()。它看起来像这样:
content://com.android.providers.media.documents/document/image%3A102
我知道这应该是这样的事实:
content://com.android.providers.media.documents/document/image:102
我知道%3A代表:,但为什么它出现在Uri中,我该如何解决?最后,我如何从这个Uri获取我的文件?
答案 0 :(得分:0)
我正在尝试从URI中获取文件
Uri
不是文件。 Uri
不必指向文件系统上的任何内容,更不用说您可以访问的地方了。
但为什么它会出现在Uri
中
Uri
是一个不透明的句柄。它可以是ContentProvider
想要的任何东西。
我该如何解决?
除了“修复”https://stackoverflow.com/questions/41795342/get-path-from-uri-throws-exception
之外,你没有,因为你不喜欢以4
开头的八位数字。就像Stack Overflow Web服务器定义它使用的URL一样,ContentProvider
定义它使用的Uri
值也是如此。
最后,我如何从这个Uri获取我的文件?
理想情况下,你没有。您使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
,而Ion使用该内容。
如果Ion不支持此功能并且只能使用文件,请使用InputStream
将字节复制到您控制的某些FileOutputStream
(例如,在getCacheDir()
中)。使用该文件进行上传,然后在完成后删除该文件。