项目场景:
ios附件打开 注意事项
注意事项:
config.xml 记得配置
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root" />
<preference name="iosExtraFilesystems" value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />
一直调试cordova.file.externalDataDirectory iOS显示为null对照上述图片 才发现
downloadFile这里不做细说 百度有类似文档
const self = this
window.resolveLocalFileSystemURL(_this.isIos ? cordova.file.tempDirectory : cordova.file.externalDataDirectory, (fs) => {
fs.getFile(fileName, { create: true, exclusive: true }, fileEntry => {
self.downloadFile(uri, fileEntry, _this)
}, e => {
console.log(e)
// eslint-disable-next-line no-undef
fs.getFile(
fileName,
{ create: false },
fileEntry => {
// 成功读取文件后调用cordova-plugin-file-opener2插件打开文件
fileEntry.file(data => {
self.preView(fileEntry, data, _this)
})
},
// eslint-disable-next-line handle-callback-err
error => {
})
})
// eslint-disable-next-line handle-callback-err
}, error => {
})
细说这个方法preView
preView (fileEntry, data, _this) {
// eslint-disable-next-line no-undef
const url = _this.isIos ? fileEntry.toURL() : fileEntry.toInternalURL()
cordova.plugins.fileOpener2.showOpenWithDialog(decodeURIComponent(url), data.type, {
success: (e) => {
console.log('file opened successfully')
},
error: (e) => {
console.log('Error status: ' + e.status + ' - Error message: ' + e.message)
},
position: [0, 0]
})
},
注意iOS获取URL的方法
fileTransfer.download(uri, fileEntry.toURL(), entry => {
这里的source uri 不要是中文 记得编译下