我正在尝试在 React Native 中共享 pdf 文件。但应用程序在这样做时崩溃了。请帮忙。以下是代码
async function func_1(
pdfUrl: string,
) {
let result = Platform.OS === 'android' && (await requestReadSmsPermission());
let filePath: string | null = null;
try {
if (
(result &&
Platform.OS == 'android' &&
result?.[PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE] ===
PermissionsAndroid.RESULTS.GRANTED &&
result?.[PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE] ===
PermissionsAndroid.RESULTS.GRANTED) ||
Platform.OS == 'ios'
) {
const dirs = RNFetchBlob.fs.dirs;
const dynamicFileName = `FileName_123.pdf`;
const reportName = dynamicFileName;
const downloadPath =
Platform.OS === 'ios'
? (dirs.DocumentDir || dirs.MainBundleDir) + '/' + reportName
: dirs.DownloadDir + '/' + reportName;
RNFetchBlob.config({
fileCache: true,
path: downloadPath,
addAndroidDownloads: {
title: reportName,
useDownloadManager: true,
notification: true,
path: downloadPath,
mime: mimeType(downloadPath),
description: 'File downloaded by download manager.',
},
})
.fetch('GET', encodeURI(pdfUrl), {})
.then(async (res) => {
console.log({ res });
filePath = res?.path();
console.log({ filePath });
const shareOptions = {
title: dynamicFileName,
url: `file://${res?.path()}`,
failOnCancel: false,
showAppsToView: true,
mimeType: 'application/pdf',
};
Share.open(shareOptions);
})
.catch((error) => {
console.log(error)
});
} else {
}
} catch (err) {
console.log(err)
}
}
当我尝试上面的代码时,一切正常,但在共享文件时,它说 - 共享失败,请稍后再试。 (在whatsapp、团队中尝试过)。 我的文件路径如下 - /storage/emulated/0/Download/FileName_123.pdf
当我将 uri 的代码调整为 base64 时,应用程序崩溃,而不提供任何日志
RNFetchBlob.config(configOptions)
.fetch('GET', pdfUrl)
.then((resp) => {
filePath = resp?.path();
return resp?.readFile('base64'); //crashes here.
})
.then(async (base64Data) => {
base64Data = `data:${type};base64,` + base64Data;
await Share.open({ title: dynamicFileName, url: base64Data });
})
.catch((err) => {
console.log(err)
});
我正在使用“react-native-share”:“^ 6.2.1”和“rn-fetch-blob”:“^ 0.12.0”,反应本机版本是“react-native”:“0.67.4”。
请帮助 kindoff 困了一周了。检查 Android > 10
我通过更改下载目录路径使其工作。由于权限问题,它无法工作。
发生在我身上的文件名中有“_”或“”。从名称中删除这些字符应该可以。现在对我来说工作得很好。