1

我想下载最大 50MB 的 zip 文件。目前我正在使用以下 IModel 对象的 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,它也不会崩溃。

4

2 回答 2

2

表明您应该在发送给定数量的数据后刷新输出流。

于 2013-06-28T08:43:17.023 回答
2

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

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

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

于 2013-06-28T09:17:14.967 回答