[英]Inside Flutter, copy large file from Assets Folder to Application Documents Folder
我尝试使用大型数据库文件。 因此,我的代码将此文件从 Assets 文件夹复制到 Application-Documents-Folder,如下面的代码示例所示。
对于小文件,我的代码工作得很好,我可以很好地处理我的数据库。
但是,如果我使用大型 db-File (> 665MB) 进行尝试,对于我的 Flutter 应用程序的 Android 部分,事情开始出现问题。 (事实上,iOS 工作得非常好,无论 db-File 真的有多大......)。 仅对于 Android,大型 db-File 会破坏事物。
以下 Dart 代码不适用于 Android 中的大文件 (>665MB) -(但它适用于小文件):
Future<Database> initializeDatabase() async {
Directory directory = await getApplicationDocumentsDirectory();
var dbPath = join(directory.path, "ch_departures.db");
// copy db file from Assets folder to Documents folder (only if not already there...)
if (FileSystemEntity.typeSync(dbPath) == FileSystemEntityType.notFound) {
ByteData data = await rootBundle.load("assets/ch_departures.db");
writeToFile(data, dbPath);
}
// Open/create the database at a given path
var departuresDatabase = await openDatabase(dbPath);
return departuresDatabase;
}
// HERE IS WHERE THE CODE CRASHES (WHEN TRYING TO WRITE THE LOADED BYTES)
void writeToFile(ByteData data, String path) {
final buffer = data.buffer;
return new File(path).writeAsBytesSync(
buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}
我尝试使用 Flutter 应用程序 Android 部分的gradle.properties
文件。
在 gradle.properties 里面,我试过:
org.gradle.jvmargs=-Xmx3g -XX:MaxPermSize=2048m
但不幸的是,没有成功。
您对如何使用大型(> 665MB)文件进行所有这些工作有任何想法吗????
对于我遇到的Flutter的大文件副本问题,终于有了解决方案。 我创建了一个Flutter插件,该插件分别在iOS和Android中本地进行文件复制。
我遇到了同样的问题,将大型 SQLite 文件从资产目录复制到应用程序文档文件夹。 我找不到任何好的解决方案。
所以我最终通过压缩缩小了 SQLite 的大小。 然后我将压缩文件复制到应用程序文档目录并提取数据库。 如果您的资产目录中有一个大文件,您可以将其压缩为拆分文件并使用“writeToFile”功能将它们一一复制......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.