Как выбрать любой тип файла и загрузить его на сервер? - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь выбрать любой тип файлов, например .pdf или .doc, и т. Д., А затем загрузить его на сервер с библиотекой retrofit.Я могу выбирать изображения, видео и музыку из моих файлов и легко отправлять их на сервер.но в API 19 и выше, я не могу иметь прямой доступ к другим файлам!Я пробовал так:

    private InputStream getInputStreamForVirtualFile(Uri uri, String mimeTypeFilter)
        throws IOException {

    ContentResolver resolver = getContentResolver();

    String[] openableMimeTypes = resolver.getStreamTypes(uri, mimeTypeFilter);

    if (openableMimeTypes == null || openableMimeTypes.length < 1) {
        throw new FileNotFoundException();
    }

    return resolver
            .openTypedAssetFileDescriptor(uri, openableMimeTypes[0], null)
            .createInputStream();
}

этот код дает мне InputStream файла и для отправки его на сервер с модификацией я решил создать копию своего файла, а затем использовать этот файл для отправки, мой код:

    private File getFile(Uri uri) throws IOException {
    String[] array = uri.getPath().split("/");
    File x = new File(Environment.getExternalStorageDirectory()+ "/" + array[array.length - 1]);
    FileOutputStream fileOutputStream = new FileOutputStream(x);
    InputStream inputStream = getInputStreamForVirtualFile(uri, "*/*");
    byte[] buffer = new byte[4096];
    int n = 0;
    while (-1 != (n = inputStream.read(buffer))) {
        fileOutputStream.write(buffer, 0, n);
    }
    inputStream.close();
    fileOutputStream.close();
    return x;
}

Я еще не могу отправить его на сервер, но этот код в Android 8 дает мне нужный файл, но это Android 7, у меня есть эта ошибка:

The requested MIME type is not supported.

Мой вопрос: как правильно выбрать любой тип файла и отправить его на сервер с модификацией ?!

и если мой способ - это рациональный способ отправки любого типа файла, как я могу исправить это, чтобы он поддерживал все андроиды, такие как android 7, и исправлял мою ошибку!?

...