android - 在 Android 上使用 Retrofit/okhttp 堆栈上传远程 URI

标签 android android-contentprovider retrofit2 android-file okhttp

亲爱的堆栈溢出, 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/

相关文章:

java - DynamoDB 在 map 中存储/映射复杂对象

java - 制作一个自动跳线的布局表

android - 无法从 Jetpack Compose 中的 onClick 显示 AlertDialog

android - 如何获取平板电脑上所有用户的内容提供者列表

Android Studio Retrofit OnResponse 问题

java - 为什么即使 "module"和 "sModule"相等,java 代码中的 if 语句也会被跳转

android - 从内部存储创建和共享文件

android - 在 Android 中将联系人数据加入我的表格

android - 使用 RxAndroid MVP Retrofit 修改回调

android - 改造 POST : JSON object does't send to PHP server