我試圖讓Tomcat寫出servlet的內容作爲bzip2文件(也許愚蠢的要求,但它顯然是一些集成工作的必要條件)。我正在使用Spring框架,因此它在AbstractController中。寫文件數據爲Bzip2輸出servlet響應
我使用的bzip2庫從http://www.kohsuke.org/bzip2/
我能得到的內容bzip2壓縮的很好,但是當文件被寫入了它似乎包含了一堆元數據,是無法辨認的bzip2的文件。
下面是我在做什麼
// get the contents of my file as a byte array
byte[] fileData = file.getStoredFile();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//create a bzip2 output stream to the byte output and write the file data to it
CBZip2OutputStream bzip = null;
try {
bzip = new CBZip2OutputStream(baos);
bzip.write(fileData, 0, fileData.length);
bzip.close();
} catch (IOException ex) {
ex.printStackTrace();
}
byte[] bzippedOutput = baos.toByteArray();
System.out.println("bzipcompress_output:\t" + bzippedOutput.length);
//now write the byte output to the servlet output
//setting content disposition means the file is downloaded rather than displayed
int outputLength = bzippedOutput.length;
String fileName = file.getFileIdentifier();
response.setBufferSize(outputLength);
response.setContentLength(outputLength);
response.setContentType("application/x-bzip2");
response.setHeader("Content-Disposition",
"attachment; filename="+fileName+";)");
這是正在從春天下面的方法稱爲一個AbstractController
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception
我它在不同的做法採取一些刺,包括直接寫入ServletOutput,但我非常難過,無法在網上找到任何/很多的例子。
來自任何人遇到此問題的任何建議將不勝感激。替代庫/方法很好,但不幸的是它必須是bzip2'd。
+1用於可能的IllegalStateException的早期警告。 – 2010-02-20 06:21:13