11package org .devgateway .ocds .web .rest .controller .export ;
22
33import io .swagger .annotations .ApiOperation ;
4- import java .io .BufferedOutputStream ;
5- import java .io .File ;
6- import java .io .FileInputStream ;
7- import java .io .FileOutputStream ;
8- import java .io .IOException ;
9- import java .io .InputStream ;
10- import java .util .zip .Deflater ;
11- import java .util .zip .ZipEntry ;
12- import java .util .zip .ZipOutputStream ;
13- import javax .servlet .http .HttpServletResponse ;
14- import javax .validation .Valid ;
154import org .apache .commons .io .FileCleaningTracker ;
16- import org .apache .commons .io .IOUtils ;
175import org .devgateway .ocds .persistence .mongo .Release ;
186import org .devgateway .ocds .persistence .mongo .constants .MongoConstants ;
197import org .devgateway .ocds .web .rest .controller .GenericOCDSController ;
2917import org .springframework .web .bind .annotation .RequestMethod ;
3018import org .springframework .web .bind .annotation .RestController ;
3119
20+ import javax .servlet .http .HttpServletResponse ;
21+ import javax .validation .Valid ;
22+ import java .io .BufferedOutputStream ;
23+ import java .io .IOException ;
24+ import java .util .zip .Deflater ;
25+ import java .util .zip .ZipEntry ;
26+ import java .util .zip .ZipOutputStream ;
3227
3328import static org .springframework .data .mongodb .core .query .Query .query ;
3429
3934@ RestController
4035public class ExcelExportController extends GenericOCDSController {
4136 protected final Logger logger = LoggerFactory .getLogger (ExcelExportController .class );
42-
37+ @ Autowired
38+ protected AdminSettingsRepository adminSettingsRepository ;
4339 @ Autowired
4440 private SettingsUtils settingsUtils ;
45-
4641 @ Autowired
4742 private ExcelGenerator excelGenerator ;
48-
4943 @ Autowired
5044 private FileCleaningTracker fileCleaningTracker ;
5145
52- @ Autowired
53- protected AdminSettingsRepository adminSettingsRepository ;
54-
5546 @ ApiOperation (value = "Export releases in Excel format." )
5647 @ RequestMapping (value = "/api/ocds/excelExport" , method = {RequestMethod .GET , RequestMethod .POST })
5748 public void excelExport (@ ModelAttribute @ Valid final YearFilterPagingRequest filter ,
@@ -74,39 +65,25 @@ public void excelExport(@ModelAttribute @Valid final YearFilterPagingRequest fil
7465 if (numberOfReleases <= settingsUtils .getExcelBatchSize ()) {
7566 response .setContentType ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" );
7667 response .setHeader ("Content-Disposition" , "attachment; filename=" + "excel-export.xlsx" );
77-
7868 response .getOutputStream ().write (excelGenerator .getExcelDownload (filter ));
7969 } else {
80- File file = File .createTempFile ("createZip" , ".zip" );
81- logger .info ("Created temp file: " + file .getAbsolutePath ());
82-
83- BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream (file ));
84-
85- ZipOutputStream zout = new ZipOutputStream (bos );
70+ response .setContentType ("application/zip" );
71+ response .setHeader ("Content-Disposition" , "attachment; filename=" + "excel-export.zip" );
72+ response .flushBuffer ();
73+ ZipOutputStream zout = new ZipOutputStream (new BufferedOutputStream (response .getOutputStream ()));
8674 zout .setMethod (ZipOutputStream .DEFLATED );
87- zout .setLevel (Deflater .BEST_SPEED );
88-
75+ zout .setLevel (Deflater .NO_COMPRESSION );
8976 int numberOfPages = (int ) Math .ceil ((double ) numberOfReleases / filter .getPageSize ());
9077 for (int i = 0 ; i < numberOfPages ; i ++) {
9178 filter .setPageNumber (i );
92-
9379 ZipEntry ze = new ZipEntry ("excel-export-page " + (i + 1 ) + ".xlsx" );
94-
9580 zout .putNextEntry (ze );
9681 byte [] bytes = excelGenerator .getExcelDownload (filter );
9782 zout .write (bytes , 0 , bytes .length );
98-
9983 zout .closeEntry ();
84+ response .flushBuffer ();
10085 }
10186 zout .close ();
102- fileCleaningTracker .track (file , file );
103- IOUtils .closeQuietly (bos );
104-
105- response .setContentType ("application/zip" );
106- response .setHeader ("Content-Disposition" , "attachment; filename=" + "excel-export.zip" );
107-
108- InputStream is = new FileInputStream (file );
109- IOUtils .copy (is , response .getOutputStream ());
11087 response .flushBuffer ();
11188 }
11289 }
0 commit comments