int page = size % ConfigUtil.configFileSize() == 0 ?
size / ConfigUtil.configFileSize() : size / ConfigUtil.configFileSize() + 1;
ZipOutputStream zos = new ZipOutputStream(os);
ServletActionContext.getResponse().addHeader("Content-Disposition",
"attachment; filename=\"" + (StringUtil.iso88591String(namedSql.getKeyword()) +
namedSql.getId() + DynamicConst.DYNAMIC_DOWNLOAD_ZIP_FILE_SUFFIX) + "\"");
try {
zos.flush();
for (int i=0; i<page; i++)
{
CommResult ret = sqlExecuteDao.executeQuery(
DynamicSqlUtil.generatePageSql(namedSql.getSql(), i * ConfigUtil.configFileSize() + 1, ConfigUtil.configFileSize()),
RequestUtil.parseRequest(namedSql.getParams()));
FileUtil.putZipEntryToFile(zos, ret, i + DynamicConst.DYNAMIC_DOWNLOAD_FILE_SUFFIX);
//
zos.putNextEntry( new ZipEntry(entryName));
FileUtil.writeHeader(zos, result.getColumns());
FileUtil.write(zos, result.getRowDatas());
os.write(FileUtil.listToString(data).getBytes());
size / ConfigUtil.configFileSize() : size / ConfigUtil.configFileSize() + 1;
ZipOutputStream zos = new ZipOutputStream(os);
ServletActionContext.getResponse().addHeader("Content-Disposition",
"attachment; filename=\"" + (StringUtil.iso88591String(namedSql.getKeyword()) +
namedSql.getId() + DynamicConst.DYNAMIC_DOWNLOAD_ZIP_FILE_SUFFIX) + "\"");
try {
zos.flush();
for (int i=0; i<page; i++)
{
CommResult ret = sqlExecuteDao.executeQuery(
DynamicSqlUtil.generatePageSql(namedSql.getSql(), i * ConfigUtil.configFileSize() + 1, ConfigUtil.configFileSize()),
RequestUtil.parseRequest(namedSql.getParams()));
FileUtil.putZipEntryToFile(zos, ret, i + DynamicConst.DYNAMIC_DOWNLOAD_FILE_SUFFIX);
//
zos.putNextEntry( new ZipEntry(entryName));
FileUtil.writeHeader(zos, result.getColumns());
FileUtil.write(zos, result.getRowDatas());
os.write(FileUtil.listToString(data).getBytes());
本文介绍了一种在Web应用中实现文件批量下载并实时压缩为ZIP格式的方法。通过使用ServletActionContext及ZipOutputStream,文章详细展示了如何设置HTTP响应头以便浏览器正确处理下载请求,并通过循环执行SQL查询来分批次获取数据进行压缩。

被折叠的 条评论
为什么被折叠?



