Как получить путь к файлу и имя файла из изображения галереи, которое будет использоваться для загрузки на сервер? [Дубликат]

Почему курица может продолжать бегать и прыгать, несмотря на то, что ее голову отрубают? Обратите внимание, что это не всегда всегда ; некоторые цыплята могут перестать двигаться немедленно, а другие могут продолжать работать в течение нескольких месяцев . Когда это происходит, это происходит, потому что это происходит. Означает ли это, что мы должны вырезать наши домашние животные?

Как разрезание наших питомцев с головой, использование освобожденной памяти - это плохая идея. Это не означает, что это приведет к отрицательным результатам; ваша программа может продолжать работать как ожидалось на вашем компьютере, в то время как if (fubar) (где fubar является вашим недопустимым указателем) может быть достаточно, чтобы вызвать сбой вашей программы в других реализациях .

Эта идея свободы реализации для определения (или не) поведения формально известна как неопределенное поведение ; поведение не определено, поскольку стандарт C, набор документов, определяющий поведение C-реализации, не определяет поведение . Поэтому, как и резка наших домашних животных, мы должны избегать всех неопределенного поведения.

1
задан Tonher 11 March 2018 в 15:51
поделиться

1 ответ

Я не нашел, как я могу получить файл из Uri.

Нет файла. ACTION_OPEN_DOCUMENT и ACTION_GET_CONTENT не открывают файл. Они открывают документ. Этот документ может быть файлом. Возможно, это не так. Это Uri может указывать на:

  • Локальный файл на внешнем хранилище
  • Локальный файл на внутренней памяти для другого приложения
  • Локальный файл на съемном носителе
  • Локальный файл, который зашифрован и нуждается в расшифровке на лету
  • Поток байтов, хранящихся в столбце BLOB в базе данных
  • Часть содержимого, которое нужно загрузить другим приложением сначала
  • ... и т. д.

Как я могу получить реальную путь к файлу?

У вас нет.

Если вы хотите только принимать файлы, интегрируйте библиотеку выбора файлов вместо используя ACTION_OPEN_DOCUMENT или ACTION_GET_CONTENT.

Если вы используете ACTION_GET_CONTENT, а схема Uri, которую вы получаете, это file, тогда getPath() будет файловым путем.

В противном случае вам нужно понять, что вы не знаете, откуда документ выходит из , и перестать думать с точки зрения «реального пути к файлу». Используйте ContentResolver и openInputStream() или DocumentFile.fromSingleUri() или аналогичные методы для работы с Uri.

1
ответ дан CommonsWare 16 August 2018 в 01:38
поделиться
  • 1
    Спасибо за ответ ! Я признаю, что схватил код, не зная, что это значит. Я проверю этот веб-сайт, кажется, действительно интересно. – Tonher 11 March 2018 в 16:13
Другие вопросы по тегам:

Похожие вопросы: