如何使用来自不同存储位置的 imagepath 创建文件

问题描述

通过使用 GligarPicker ImagePicker 得到了 ImagePaths 列表,每个图像来自不同的位置,如

N

使用 fileDescriptor 和 FileInputStream 和 FileOutputStream 创建文件并将其存储在应用程序级文件夹中。使用改造多部分将这些图像发送到服务器。 要将这些用户选择的图像存储在应用程序级文件夹中,我想使用上述图像路径创建文件。这里是如何创建文件

试过了:

/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20210219-WA0000.jpeg
/storage/emulated/0/WhatsApp/Media/Hangto/IMG-2034543533219-TQQ1.jpeg

应用程序在 val outputStream = FileOutputStream(file) as file 处崩溃 崩溃报告:

  val uri = Uri.parse("file://" + imagesList[i].toString())
  val parcelFileDescriptor: ParcelFileDescriptor? =
                        requireContext().contentResolver.openFileDescriptor(uri,"r")
                    val fileDescriptor: FileDescriptor? = parcelFileDescriptor?.fileDescriptor
      val file = File(
                        requireContext().externalCacheDir?.path,requireContext().contentResolver.getFileName(uri!!)
                    )
                    file.mkdir()
                    file.createNewFile()
                    val inputStream = FileInputStream(fileDescriptor)
                    val outputStream = FileOutputStream(file)
                    inputStream.copyTo(outputStream)

在这里创建文件后,我尝试获取文件绝对路径并返回

Caused by: java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.visilogix.smarttrax/cache: open failed: EISDIR (Is a directory)
    at libcore.io.IoBridge.open(IoBridge.java:496)

根据日志,我得出结论,我所指的 filePath 是错误的,如何修复它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)