Длина файла равна 0 при воссоздании файла из URI или исходного пути к файлу [getExternalFilesDir (тип String) против getFilesDir ()]

Сначала немного истории: это приложение делает снимок и загружает его в хранилище BLOB-объектов Azure.

Картинка хранится в файле (внутреннее хранилище) с помощьюgetApplicationContext().getFilesDir();

Для загрузки мне нужно вызвать функцию uploadFromFile (..) следующим образом:CloudBlockBlob.uploadFromFile(String path);

Функция uploadFromFile в Azure SDK выглядит следующим образом:

public void uploadFromFile(final String path) throws StorageException, IOException {
        uploadFromFile(path, null /* accessCondition */, null /* options */, null /* opContext */);
    }

public void uploadFromFile(final String path, final AccessCondition accessCondition, BlobRequestOptions options,
            OperationContext opContext) throws StorageException, IOException {
        File file = new File(path);
        long fileLength = file.length();
        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
        this.upload(inputStream, fileLength, accessCondition, options, opContext);
        inputStream.close();
    }

Вопрос на линииlong fileLength = file.length(); где fileLength равно 0.

Я проверил это против использованияEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); для каталога хранения. Это работает.

Мне нужно использовать внутреннее хранилище против внешнего хранилища, так как это специально требуется для этого проекта.

РЕДАКТИРОВАТЬ: Androidфайл в документации ничего не говорится об этом поведении. Я предполагаю, что это может быть связано с использованием внутреннего хранилища приложения.

РЕДАКТИРОВАТЬ: Добавление некоторого кода

Я отправляюфайл mPhotoFile для моей камеры намерения. Это будет содержать фотографию. mPhotoFileUri содержит URI для этого файла. Ниже приведен код для использования пути из файла.

File file = new File(mPhotoFile.getPath()); // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_234929_1936823724.jpg
boolean fileExists = file.exists();         // true
long fileLength = file.length();            // length 0

Ниже приведен код для получения файла из URI.

File file = new File(mPhotoFileUri.getPath());  // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_235534_-1059496729.jpg
boolean fileExists = file.exists();             // true
long fileLength = file.length();                // length 0

Я должен передать путь этого файлаuploadFromFile функция.

Обходной путь упомянут в моем «ответе».

Ответы на вопрос(3)

Ваш ответ на вопрос