Open PDF file in expo after download

Viewed 99

I’m downloading a file, and I’ve expected open the file after finished downloading, but this does not work, it’s viewed on a black screen when opening using Linking, and I open this file in the folder where it is and it opens correctly. How can I fix this?

This is the URL of the file in STORAGE:

content://com.android.externalstorage.documents/tree/primary%3ADownload%2FSigaa/document/primary%3ADownload%2FSigaa%2Fhistory.pdf

My code:

const downloadPath = FileSystem.documentDirectory! + (Platform.OS == "android" ? "" : "");
const ensureDirAsync: any = async (dir: any, intermediates = true) => {
  const props = await FileSystem.getInfoAsync(dir);
  if (props.exists && props.isDirectory) {
    return props;
  }
  let _ = await FileSystem.makeDirectoryAsync(dir, { intermediates });
  return await ensureDirAsync(dir, intermediates);
};
const downloadFile = async (fileUrl) => {
    if (Platform.OS == "android") {
      const dir = ensureDirAsync(downloadPath);
    }

    let fileName = "history";
    const downloadResumable = FileSystem.createDownloadResumable(
      fileUrl,
      downloadPath + fileName,
      {}
    );
    console.log(downloadPath);
    try {
      const { uri } = await downloadResumable.downloadAsync();
      saveAndroidFile(uri, fileName);
    } catch (e) {
      console.error("download error:", e);
    }
  };

  const saveAndroidFile = async (fileUri, fileName = "File") => {
    try {
      const fileString = await FileSystem.readAsStringAsync(fileUri, { encoding: FileSystem.EncodingType.Base64 });

      if (local === "") {
        const permissions = await StorageAccessFramework.requestDirectoryPermissionsAsync();
        if (!permissions.granted) {
          return;
        }
        await AsyncStorage.setItem("local", permissions.directoryUri);
      }

      try {
        await StorageAccessFramework.createFileAsync(local, fileName, "application/pdf")
          .then(async (uri) => {
            await FileSystem.writeAsStringAsync(uri, fileString, { encoding: FileSystem.EncodingType.Base64 });

            Linking.openURL(uri);

            alert("Success!");
          })
          .catch((e) => {});
      } catch (e) {
        throw new Error(e);
      }
    } catch (err) {}
  };

The black screen when opening:

enter image description here

0 Answers
Related