将 CSV 文件传递到 Micronaut 端点的最佳方式是什么
What is the best way to pass a CSV file to an endpoint in Micronaut
在我的 Micronaut 应用程序中,我必须将 csv 数据注入到 sqllite 数据库中。目前我已经创建了一个调用端点的脚本,如下所示:
curl -v -X POST "http://hostname:3030/inject"
它正在选择服务器上已经可用的 csv 文件并将其注入 sqllite db,但我想将 csv 文件传递给端点本身并希望在服务器端使用 Rxjava Flowable 接收它,如下所示:
updateDb(@Body Flowable<String> content) {
//saveFlowableToFile(path, content);
//pick the path to load the data
...
}
我试图找到有关如何执行此操作的文档,但未能成功。
任何人都可以建议上传 20MB 的 csv 文件并注入是否是正确的方法,或者有更好的方法来做到这一点。
谢谢,
大文件最干净的解决方案应该是将数据直接流式传输到 Sqlite。
https://docs.micronaut.io/latest/guide/index.html#binding(流支持)
@Post(value = "/upload", processes = [MediaType.TEXT_PLAIN])
@ExecuteOn(TaskExecutors.IO)
fun read(@Body inputStream: InputStream) {
BufferedReader(InputStreamReader(inputStream))
...for every line in the buffered reader, parse CSV and insert to SQLite...
}
流式传输的全部意义在于在任何时间点都不会在内存中完整表示文件,因此您保存到磁盘然后再次拾取它的解决方案似乎不是最优的。
Reactive 也可能做到这一点,但我无法就该主题做出贡献。
在我的 Micronaut 应用程序中,我必须将 csv 数据注入到 sqllite 数据库中。目前我已经创建了一个调用端点的脚本,如下所示:
curl -v -X POST "http://hostname:3030/inject"
它正在选择服务器上已经可用的 csv 文件并将其注入 sqllite db,但我想将 csv 文件传递给端点本身并希望在服务器端使用 Rxjava Flowable 接收它,如下所示:
updateDb(@Body Flowable<String> content) {
//saveFlowableToFile(path, content);
//pick the path to load the data
...
}
我试图找到有关如何执行此操作的文档,但未能成功。
任何人都可以建议上传 20MB 的 csv 文件并注入是否是正确的方法,或者有更好的方法来做到这一点。
谢谢,
大文件最干净的解决方案应该是将数据直接流式传输到 Sqlite。
https://docs.micronaut.io/latest/guide/index.html#binding(流支持)
@Post(value = "/upload", processes = [MediaType.TEXT_PLAIN])
@ExecuteOn(TaskExecutors.IO)
fun read(@Body inputStream: InputStream) {
BufferedReader(InputStreamReader(inputStream))
...for every line in the buffered reader, parse CSV and insert to SQLite...
}
流式传输的全部意义在于在任何时间点都不会在内存中完整表示文件,因此您保存到磁盘然后再次拾取它的解决方案似乎不是最优的。
Reactive 也可能做到这一点,但我无法就该主题做出贡献。