Получение размера файла всегда ноль при попытке из URI - PullRequest
0 голосов
/ 10 мая 2019

Я получаю URI, используя GET_CONTENT, и он также работает, когда используется в Glide, чтобы показать изображение. Но я не получаю размер файла. Всегда показывает 0.

Я пытался использовать File (uri.path) .length ()

 fun fileSize(uri: Uri){
        var a = File(uri.path).length()
    }

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Конструктор File принимает в качестве аргумента путь к файловой системе. Вы дали ему «путь», извлеченный из URI, который, вероятно, не является путем к объекту файловой системы. (Возможно, вы используете URL-адрес file:, но не проверяете схему, поэтому не уверены.)

Если у вашего File объекта есть путь к несуществующему файлу, то при вызове File::length в документации говорится, что length() вернет ноль.


В мире Java вы можете попробовать следующее:

URI uri = ...
File file = new File(uri);
long length = file.length();

Однако это работает, только если:

  1. URI - это абсолютный URI со схемой file:.
  2. Файл, который обозначает URI, существует в пространстве имен локальной файловой системы.

(Если 1. неверно, вы получите исключение. Если 2. неверно, вы получите нулевой результат.)

Это также должно работать на платформе Android ... без добавления дополнительных зависимостей.

0 голосов
/ 10 мая 2019

A Uri не является файлом.

Добавьте зависимость для DocumentFile, например androidx.documentfile:documentfile.Затем замените ваш код на:

fun fileSize(uri: Uri){
    var a = DocumentFile.fromSingleUri(uri).length()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...