【问题标题】:What is the best way to pass a CSV file to an endpoint in Micronaut将 CSV 文件传递​​到 Micronaut 端点的最佳方法是什么
【发布时间】:2021-06-27 07:51:24
【问题描述】:

在我的 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 csv controller rx-java micronaut


    【解决方案1】:

    大文件最干净的解决方案应该是将数据直接流式传输到 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 也可以做到这一点,但我无法就该主题做出贡献。

    【讨论】:

    • @Manish 我的回答有帮助吗?
    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2014-02-12
    相关资源
    最近更新 更多