0

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

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

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

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

4

2 回答 2

2

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

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

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

于 2011-01-25T16:51:04.933 回答
0

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

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

于 2011-01-25T17:31:25.253 回答