我正在使用react-native fs将内容从CMS下载到react-native应用程序中。想法是使用该应用程序来提供在线内容/网站以供离线使用。 该应用程序在Android上运行良好,不会引发任何错误,但在iPad(ios 11.4)上,下载从未完成。 这是我正在使用该功能的App.js的一部分,这会在iPad上引发错误:
import React, {Component} from 'react'
import {
Platform,
StyleSheet,
Text,
View,
WebView,
Button,
Alert,
NetInfo,
StatusBar,
Modal,
TouchableOpacity,
Image
} from 'react-native'
import RNFS from 'react-native-fs'
export default class App extends Component {
const path = RNFS.DocumentDirectoryPath + '/assets/' + saveAs
let pp = path.split('/')
pp.pop()
return RNFS.mkdir(pp.join('/'), {NSURLIsExcludedFromBackupKey: true}).then(() => {
const download = RNFS.downloadFile({
fromUrl: url,
toFile: path,
discretionary: true,
progress: (res) => {
const tmp = this.state.bytesWritten
tmp[res.jobId.toString()] = res.bytesWritten
this.setState({bytesWritten: tmp})
},
begin: (res) => {
this.setState({
contentLength: this.state.contentLength + res.contentLength
})
},
readTimout: 15000
})
return download.promise.then((res) => {
return res;
})
.catch((error) => {
console.warn('An error occured while downloading: ' + error);
console.warn('Current URL: ' + url);
});
})
.catch ((error) => {
console.warn('An error occured while creating directory: ' + error);
});
}
在另一个函数中调用downloadAndSave函数,如下所示:
let pr = []
// d are the files that need to be downloaded, around 250-300
d.forEach((elem) => {
pr.push(this.downloadAndSave(elem.name, elem.saveAs));
})
return Promise.all(pr);
错误总是来自catch块“下载时发生错误:”。 引发的错误与受影响的URL的数量不同。
发生的错误消息是(已翻译,因此可能有些偏离):
下载大约50-70%的文件后出现错误,然后从未完成,但停止在80-90%左右。
我的问题是问题是否与超时有关或可能与许多回调有关? 是否有人在响应本机fs时遇到过此类问题,或者有人对如何解决此问题有所了解。 恐怕我什至无法真正找出问题所在。 任何帮助深表感谢!
答案 0 :(得分:0)
您是否尝试过将background: true
添加到RNFS.downloadFile({background: true})
的选项中?