如何在wicket中使用zip文件下载更大的文件?

时间:2013-06-28 06:08:16

标签: java performance download wicket

我想加载最大50MB的zip文件。目前我正在使用以下IModel Object的getObject方法来返回zip文件。

IModel fileModel = new AbstractReadOnlyModel() {
public Object getObject() {
   .....
   ZipOutputStream zip = null;
   FileOutputStream fileWriter = null;
   fileWriter = new FileOutputStream(destZipFile);
   zip = new ZipOutputStream(fileWriter);

   /*Add the zip file in the folder*/

   return new File(zipFilePath);
}

以下是下载链接

reportLink = new DownloadLink(this.getString("id.reportslink"),
                fileModel) {
            private static final long serialVersionUID = 1L;
}

目前JVM堆大小为1GB,如果有20个用户下载文件(假设每个文件50MB),则上面的代码将崩溃。任何人都可以建议,实施下载文件的最佳方式是什么,即使一次用户数达到100,也不会崩溃。

2 个答案:

答案 0 :(得分:2)

This建议您在发送给定数量的数据后刷新输出流。

答案 1 :(得分:2)

我建议您使用动态资源而不是简单的DownloadLink。

您将创建自己的AbstractResource实现,在该实现中将文件写入OutputStream,然后创建ResourceLink而不是指向该资源的DownloadLink。

请查看https://wicket-guide.googlecode.com/files/Wicket%20free%20guide.pdf的Wicket免费指南中的第13.6章。