亲爱的堆栈溢出, Android 上的 URI 概念很棒,它抽象了我们如何指向设备和互联网上的不同事物,但使用它们确实需要仔细考虑。我有几个问题要问你。
1) 人们通常如何使用远程 URI 来上传到自己的服务器? 我能想到的最好的方法是将远程 URI 下载到磁盘,并向 okhttp 提供指向该文件的指针。 这是最好的方法吗?
2) 第二个是关于本地 URI 的更基本的问题。 URI 可以指向不同的事物,并且文件的绝对路径存储在不同位置以供不同类型的提供程序使用。请参阅this link中的#getPath 。
由于 okhttp 仅适用于绝对文件,因此该文件中存在的逻辑是否是通过 okhttp 发送文件的最佳方式。
或者你有更好的建议吗?
为了简单起见,我们假设我们正在为 Kitkat 及以上版本进行开发。
最佳答案
1)是的。最好的方法是保证您可以访问它,直到上传完成(特别是如果您有恢复功能,上传可能会中断并稍后重新启动),即在本地有一个副本您自己的应用程序。 URI 可能会消失或稍后不可用。
2)是的。请参阅1)使用文件,它们具体且可靠。
编辑:
根据您的评论,我意识到我的答案没有得到很好的解释。
我所说的“使用文件”的意思是使用 context.getContentResolver().openInputStream(uri)
使用 context.openFileOutput("temp_file", 0)
将文件本地保存到您自己的应用程序或context.getFilesDir()
然后你就可以安全地使用这个文件了。
FileUtils 上尝试猜测 URI 路径的所有这些方法都是不稳定的,并且存在边缘情况,只会带来麻烦。
关于android - 在 Android 上使用 Retrofit/okhttp 堆栈上传远程 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43481966/