Файлы создаются из API, который обслуживает их как строку в кодировке Base64.
Изначально, если файл представляет собой PDF-файл, он представлен в компоненте Pdf из реакции-native-pdf, который отлично работает.
Однако в некоторых случаях файл также может быть еще одним расширением; .xslx, .docx, ... в основном типы, которые невозможно открыть в программе просмотра PDF. В этом случае
строка преобразуется в реальный файл и впоследствии может быть загружена с помощью обмена экспо:
Код: Выделить всё
import * as FileSystem from 'expo-file-system';
import { shareAsync } from 'expo-sharing';
import { useCallback } from 'react';
import { lookup } from 'react-native-mime-types';
type UseDownloadFileProps = {
source: string;
fileType: string;
};
type DownloadFileHandler = {
handleDownload: () => Promise;
};
const useDownloadFile = ({ source, fileType }: UseDownloadFileProps): DownloadFileHandler => {
const handleDownload = useCallback(async () => {
const fileUri = `${FileSystem.documentDirectory}file.${fileType}`;
try {
await FileSystem.writeAsStringAsync(fileUri, source.split(',')[1], {
encoding: FileSystem.EncodingType.Base64,
});
let mimeType = lookup(fileType);
await shareAsync(fileUri, {
...(mimeType && { mimeType }),
});
} catch (error) { }
finally {
await FileSystem.deleteAsync(fileUri);
}
}, [source, fileType]);
return { handleDownload };
};
export default useDownloadFile;

Для Android я видел случаи, когда это же (выглядящее) меню общего доступа также содержит опции для открытия файла с помощью другое приложение. В моем случае он содержит только параметры общего доступа:

Есть ли что-то, что мне не хватает при совместном использовании выставок, что могло бы позволить использовать эту опцию?
Или есть лучший способ загрузить файл?
Спасибо за продвигаться
Подробнее здесь: https://stackoverflow.com/questions/793 ... on-android
Мобильная версия