使用renderBinary()生成可下载文件

时间:2011-12-08 19:02:05

标签: playframework download file-writing

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

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

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

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

2 个答案:

答案 0 :(得分:6)

File f = File.createTempFile("prefix", "suffix");       
f.deleteOnExit();
// put contents into the file
renderBinary(f);

答案 1 :(得分:3)

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

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