0

我正在尝试在我的程序中创建一个功能,允许用户将他们的数据下载到文件中。

现在,我的一个控制器中有一个方法,它创建一个具有特定名称的 File 对象并使用 FileWriter 将内容加载到文件中。完成后,将 File 对象传递给 renderBinary()。这会按预期将文件发送给用户。

但是,这会将文件保存在我的 Play 中!项目目录在它发送之前。这让我想知道当有许多用户试图生成和下载文件时会发生什么。他们会互相覆盖吗?

简而言之,生成文件并通过 renderBinary 发送它们的最佳方式是什么?

4

2 回答 2

6
File f = File.createTempFile("prefix", "suffix");       
f.deleteOnExit();
// put contents into the file
renderBinary(f);
于 2011-12-09T13:36:29.313 回答
3

在多用户环境中,将文件数据保存为常量文件名是不好的做法。您确实冒着在单独的运行线程中的风险,您的文件可能会被覆盖,或者由于另一个文件句柄正在打开而导致 IO 异常。

更好的方法是在服务器端为文件名生成随机散列,并将其用作文件名。

于 2011-12-08T21:29:35.850 回答