我正在尝试在我的程序中创建一个功能,允许用户将他们的数据下载到文件中。
现在,我在我的一个控制器中有一个方法,它创建一个具有特定名称的File对象,并使用FileWriter将内容加载到文件中。完成后,File对象将传递到renderBinary()。这会按预期将文件发送给用户。
然而,这会将文件保存在我的Play中!项目目录发送之前。这让我想知道当有许多用户试图生成和下载文件时会发生什么。他们会互相覆盖吗?
简而言之,生成文件并通过renderBinary发送文件的最佳方法是什么?
答案 0 :(得分:6)
File f = File.createTempFile("prefix", "suffix");
f.deleteOnExit();
// put contents into the file
renderBinary(f);
答案 1 :(得分:3)
在多用户环境中,将文件数据保存为常量文件名是不好的做法。您确实存在这样的风险:在单独的运行线程中,您的文件可能会被覆盖,或者由于另一个文件句柄被打开而导致IO异常。
更好的方法是为服务器端的文件名生成随机哈希值,并将其用作文件名。