我正在使用react-native-fs下载文件(pdf,word,excel,png等),我需要在其他应用程序中打开它。是否可以使用Linking打开下载的文件或更好地打开可能的应用程序对话框,如使用Sharing时?下面代码中的Linking
试图打开文件,但它立即关闭,没有任何通知,但是我的应用程序仍然工作正常。有没有一些特殊的方法来构建特定文件类型的深度链接的URL?最佳解决方案的任何想法?
我看到有旧的软件包react-native-file-opener,但它不再维护。这个解决方案将是伟大的。
下载组件的简化代码:
import React, { Component } from 'react';
import { Text, View, Linking, TouchableOpacity } from 'react-native';
import { Icon } from 'react-native-elements';
import RNFS from 'react-native-fs';
import { showToast } from '../../services/toasts';
class DownloadFile extends Component {
state = {
isDone: false,
};
handleDeepLinkPress = (url) => {
Linking.openURL(url).catch(() => {
showToast('defaultError');
});
};
handleDownloadFile = () => {
RNFS.downloadFile({
fromUrl: 'https://www.toyota.com/content/ebrochure/2018/avalon_ebrochure.pdf',
toFile: `${RNFS.DocumentDirectoryPath}/car.pdf`,
}).promise.then(() => {
this.setState({ isDone: true });
});
};
render() {
const preview = this.state.isDone
? (<View>
<Icon
raised
name="file-image-o"
type="font-awesome"
color="#f50"
onPress={() => this.handleDeepLinkPress(`file://${RNFS.DocumentDirectoryPath}/car.pdf`)}
/>
<Text>{`file://${RNFS.DocumentDirectoryPath}/car.pdf`}</Text>
</View>)
: null;
return (
<View>
<TouchableOpacity onPress={this.handleDownloadFile}>
<Text>Download File</Text>
</TouchableOpacity>
{preview}
</View>
);
}
}
export default DownloadFile;
2条答案
按热度按时间sqserrrh1#
经过一番研究,我决定使用react-native-fetch-blob。从
0.9.0
版本开始,可以使用Intent打开下载的文件并使用Download Manager
。它也有API for iOS用于打开文档。立即编码:
xesrikrc2#
使用react-native-file-viewer预览文件,使用react-native-f获取文件的路径。像这样: