Cordova Ionic Native File 插件 - 它在 iOS 中将文件存储在哪里?
Cordova Ionic Native File plugin - Where does it store the files in iOS?
我一直在尝试在 iOS 上保存文件。现在我 运行 正在 Xcode 到我的 phone。
当我 运行 应用程序时,它说已成功保存。但是当我使用像 FileApp、FileManager、iCloud 和 Apple 蹩脚的文件应用程序这样的文件管理器应用程序时,我没有看到任何文件。
我的问题是,我从网络搜索中得知,为了保存文件,iOS 为该应用程序创建了一个沙盒文件夹。
如果我一直将其保存到 this.file.documentDirectory,用户如何在比方说 Pages 或 Numbers 应用程序中打开它? (你知道 Apple 的 Word 和 Excel 外行的替代品。)
这是代码。
writeToIOS(opts : {
fileName: string,
text: any
}) : Promise < IResponse < any >> {
let response: IResponse < boolean > = {
success: false,
error: '',
data: false
};
const options: IWriteOptions = {
replace: true
};
return new Promise((resolve, reject) => {
const path = this.file.documentsDirectory;
const directory = 'Attendance Log';
this
.file
.checkDir(path, directory)
.then(res => {
this
.file
.writeFile(path + directory, opts.fileName, opts.text, options)
.then(res => {
response = {
...response,
success: true,
error: res,
data: res
};
resolve(response);
})
.catch(error => reject(error));
})
.catch(() => {
this
.file
.createDir(path, directory, true)
.then(directory => {
this
.file
.writeFile(path + directory.name, opts.fileName, opts.text, options)
.then(res => {
response = {
...response,
success: true,
error: res,
data: res
};
resolve(response);
})
.catch(error => reject(error));
})
.catch(error => reject(error));
});
});
}
编辑:
client/user 应该做的是能够选择文件并在 his/her 最喜欢的应用程序中打开它。即文件管理器应用程序或 Writer 或电子表格应用程序。
我对iOS没有太多经验,但我认为你选择了很好的目录。
cordova.file.documentsDirectory - Files private to the app, but that
are meaningful to other application (e.g. Office files). Note that for
OSX this is the user's ~/Documents directory. (iOS, OSX)
在 iOS 我会搜索 /var/mobile/Applications/<UUID>/Documents
这是将 cordova-plugin-fileopener2 与 ionic 本机文件打开器结合使用:
const options = {
replace: true
};
const path = this.file.documentsDirectory;
const directory = 'Attendance Log';
this.file
.checkDir(path, directory)
.then(res => {
this.file
.writeFile(path + directory, opts.fileName, opts.text, options)
.then(res => {
this.fileOpener
.open(`${path}${directory}/${opts.fileName}` , 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
.then(() => ...)
.catch(error => ...);
})
.catch(error => ...);
我一直在尝试在 iOS 上保存文件。现在我 运行 正在 Xcode 到我的 phone。
当我 运行 应用程序时,它说已成功保存。但是当我使用像 FileApp、FileManager、iCloud 和 Apple 蹩脚的文件应用程序这样的文件管理器应用程序时,我没有看到任何文件。
我的问题是,我从网络搜索中得知,为了保存文件,iOS 为该应用程序创建了一个沙盒文件夹。
如果我一直将其保存到 this.file.documentDirectory,用户如何在比方说 Pages 或 Numbers 应用程序中打开它? (你知道 Apple 的 Word 和 Excel 外行的替代品。)
这是代码。
writeToIOS(opts : {
fileName: string,
text: any
}) : Promise < IResponse < any >> {
let response: IResponse < boolean > = {
success: false,
error: '',
data: false
};
const options: IWriteOptions = {
replace: true
};
return new Promise((resolve, reject) => {
const path = this.file.documentsDirectory;
const directory = 'Attendance Log';
this
.file
.checkDir(path, directory)
.then(res => {
this
.file
.writeFile(path + directory, opts.fileName, opts.text, options)
.then(res => {
response = {
...response,
success: true,
error: res,
data: res
};
resolve(response);
})
.catch(error => reject(error));
})
.catch(() => {
this
.file
.createDir(path, directory, true)
.then(directory => {
this
.file
.writeFile(path + directory.name, opts.fileName, opts.text, options)
.then(res => {
response = {
...response,
success: true,
error: res,
data: res
};
resolve(response);
})
.catch(error => reject(error));
})
.catch(error => reject(error));
});
});
}
编辑:
client/user 应该做的是能够选择文件并在 his/her 最喜欢的应用程序中打开它。即文件管理器应用程序或 Writer 或电子表格应用程序。
我对iOS没有太多经验,但我认为你选择了很好的目录。
cordova.file.documentsDirectory - Files private to the app, but that are meaningful to other application (e.g. Office files). Note that for OSX this is the user's ~/Documents directory. (iOS, OSX)
在 iOS 我会搜索 /var/mobile/Applications/<UUID>/Documents
这是将 cordova-plugin-fileopener2 与 ionic 本机文件打开器结合使用:
const options = {
replace: true
};
const path = this.file.documentsDirectory;
const directory = 'Attendance Log';
this.file
.checkDir(path, directory)
.then(res => {
this.file
.writeFile(path + directory, opts.fileName, opts.text, options)
.then(res => {
this.fileOpener
.open(`${path}${directory}/${opts.fileName}` , 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
.then(() => ...)
.catch(error => ...);
})
.catch(error => ...);