我正在使用
rememberLauncherForActivityResult
使用 Uri
获取图像为 Modifier.clickable { launcher.launch("image/*") }
。
以下https://firebase.google.com/docs/storage/android/upload-files#upload_from_a_local_file,我正在做相当于:
val file = Uri.fromFile(File(imagePath))
val uploadTask = eventImageRef.putFile(file)
其中
imagePath
相当于 imageUri.path
,其中 imageUri
只是从链接到用户使用媒体选择器选择的图像的 Uri
获得的 rememberLauncherForActivityResult
。
但是,当尝试上传时,会出现
ENOENT
:
Caused by: java.io.FileNotFoundException: /picker_get_content/0/com.android.providers.media.photopicker/media/1000006961: open failed: ENOENT (No such file or directory)
确实,
Uri
这样的File()
不存在,系统无法找到它。
我的问题是:如何将 Uri 视为文件?
imageUri.toFile()
使应用程序崩溃。
如何将 Uri 视为文件?
A
Uri
不必指向文件系统上的文件,更不用说您的应用程序可以直接访问文件系统的文件了。
您可以尝试使用
putFile()
,而不是使用 putStream()
。您可以使用 ContentResolver
及其
openInputStream()
方法来获取可与
InputStream
一起使用的
putStream()
。