【问题标题】:Create a temporary file, then upload it using FTP (Java webapp)创建一个临时文件,然后使用 FTP (Java webapp) 上传它
【发布时间】:2011-01-25 15:22:12
【问题描述】:

我的 Web 应用程序的用户可以选择启动一个进程,该进程生成一个 CSV 文件(由数据库中的一些数据填充)并将其上传到 FTP 服务器(另一个部门将从那里读取该文件)。我只是想弄清楚如何最好地实现这一点。我使用commons net ftp 功能。它提供了两种方式将数据上传到 FTP 服务器:

  • storeFile(远程字符串,本地输入流)
  • storeFileStream(远程字符串)

生成所有 CSV 数据可能需要一段时间,因此我认为始终保持连接打开 (storeFileStream) 并不是最好的方法。这就是为什么我想生成一个临时文件,填充它,然后才传输它。

在 web 应用程序中生成临时文件的最佳方法是什么?是否安全并推荐使用File.createTempFile

【问题讨论】:

    标签: java ftp apache-commons-net


    【解决方案1】:

    只要您不同时创建数千个 CSV 文件,从我的角度来看,上传时间并不重要。数据库通常逐行输出数据,如果这已经是 CSV 文件所需的格式,我强烈建议不要使用临时文件 - 只需即时进行转换:

    创建一个 InputStream 实现,逐行读取数据库数据,将其转换为 CSV 并通过其 read() 方法发布数据。

    顺便说一句:您提到转换是由 Web 应用程序完成的,并且可能需要很长时间 - 这可能会出现问题,因为默认 Web 客户端有超时。因此,持久的过程最好由仅由 webapp 界面触发的后台线程来完成。

    【讨论】:

      【解决方案2】:

      可以使用createTempFile,new File(tmpDir, UUID.randomUUID().toString()) 也可以。只是不要使用deleteOnExit(),它是一个泄漏大师。请务必自行删除该文件。

      编辑:由于您将在内存中保存数据,因此不要将其存储在任何地方;包装 java.io.ByteArrayInputSteam 并使用带有 InputStream 的方法。更简洁更好的解决方案。

      【讨论】:

        猜你喜欢
        • 2012-08-15
        • 1970-01-01
        • 2018-01-18
        • 1970-01-01
        • 2015-10-03
        • 2013-05-05
        • 2018-04-28
        • 2019-06-23
        • 2013-01-16
        相关资源
        最近更新 更多