创建一个临时文件,然后使用FTP(Java webapp)上传它

时间:2011-01-25 15:22:12

标签: java ftp apache-commons-net

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

  • storeFile(String remote,InputStream local)
  • storeFileStream(String remote)

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

在webapp中生成临时文件的最佳方法是什么?是否安全并建议使用File.createTempFile

2 个答案:

答案 0 :(得分:1)

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

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

BTW:您提到转换是由Web应用程序完成的,并且可能需要很长时间 - 这可能会有问题,因为默认Web客户端有超时。因此,应该通过仅由webapp接口触发的后台线程来更好地完成持久的过程。

答案 1 :(得分:0)

可以使用createTempFile,新文件(tmpDir,UUID.randomUUID()。toString())也可以。只是使用 deleteOnExit(),它是一个泄密主机。确保您自己删除了该文件。

编辑:因为你将把数据存储在内存中,所以不要将它存储在任何地方;包装java.io.ByteArrayInputSteam并使用带有InputStream的方法。更整洁,更好的解决方案。