Не удается получить идентификатор файла выбранного файла с google-накопителя в интерфейсе Drive rest Api - PullRequest
1 голос
/ 14 марта 2019

Теперь API-интерфейс Google Drive устарел, поэтому я интегрировал их новый API Drive REST.В моем приложении я хочу показать средство выбора файлов, чтобы выбрать документ / изображения с Google Drive.Я использовал их пример: https://github.com/gsuitedevs/android-samples/blob/master/drive/deprecation/app/src/main/java/com/google/android/gms/drive/sample/driveapimigration/MainActivity.java

private void openFileFromFilePicker (Uri uri) {

    if (mDriveServiceHelper != null) {
        Log.d(TAG, "Opening " + uri.getPath());

        mDriveServiceHelper.openFileUsingStorageAccessFramework(getContentResolver(), uri)
                .addOnSuccessListener(nameAndContent -> {
                        String name = nameAndContent.first;
                        String content = nameAndContent.second;

                        mFileTitleEditText.setText(name);
                        mDocContentEditText.setText(content);

                        // Files opened through SAF cannot be modified.
                        setReadOnlyMode();
                    })
                .addOnFailureListener(exception ->
                        Log.e(TAG, "Unable to open file from picker.", exception));
    }
}

Теперь я хочу загрузить выбранный файл на свой сервер, для этого мне потребуется fileID, но в onActivityResult я могу получить доступ только к имени файла и содержимому.Поэтому, пожалуйста, помогите мне и предложите мне любое решение.Как я могу загрузить выбранный файл резюме или изображение с Google Drive на мой сервер.

1 Ответ

0 голосов
/ 04 июня 2019

Возможно, вы уже нашли ответ на свой вопрос, но ответ уже был в вашем вопросе. Вы используете Storage Access Framework (SAF). Когда файл открыт, содержимое файла может быть загружено в пользовательский интерфейс. Там должен быть дополнительный кусок кода - продолжение этого, где загружается контент.

/**
 * Opens the file at the {@code uri} returned by a Storage Access Framework {@link 
 Intent}
 * created by {@link #createFilePickerIntent()} using the given {@code contentResolver}.
 */
public Task<Pair<String, String>> openFileUsingStorageAccessFramework(
        ContentResolver contentResolver, Uri uri) {
    return Tasks.call(mExecutor, () -> {
            // Retrieve the document's display name from its metadata.
            String name;
            try (Cursor cursor = contentResolver.query(uri, null, null, null, null)) {
                if (cursor != null && cursor.moveToFirst()) {
                    Log.d(TAG, "cursor.getColumnCount(): " + cursor.getColumnCount());
                    for (int i = 0; i < cursor.getColumnCount(); i++) {
                        Log.d(TAG, i + " - " + cursor.getString(i) + "\n");
                    }
                    int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
                    name = cursor.getString(nameIndex);
                } else {
                    throw new IOException("Empty cursor returned for file.");
                }
            }

            // Read the document's contents as a String.
            String content;
            try (InputStream is = contentResolver.openInputStream(uri);
                 BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
                StringBuilder stringBuilder = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    stringBuilder.append(line);
                }
                content = stringBuilder.toString();
            }

            return Pair.create(name, content);
        });
}

Посмотрите под комментарием // Считайте содержимое документа в виде строки.

О SAF: https://developer.android.com/guide/topics/providers/document-provider

P.S. SAF не предоставляет доступ к идентификатору файла для загрузки файла. SAF имеет доступ к файлу по URI.

...