Я использую 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 as File() не существует, и система не может его найти.
Мой вопрос: как я могу рассматривать Uri как файл? imageUri.toFile() вылетает приложение.
как я могу рассматривать Uri как файл?
Uri не обязательно должен указывать на файл в файловой системе, не говоря уже о том, к которому ваше приложение имеет прямой доступ к файловой системе.
Вместо использования putFile() вы можете попробовать использовать putStream(). Вы можете использовать ContentResolver и его метод openInputStream(), чтобы получить InputStream, который можно использовать с putStream().