Я пытаюсь заставить Tomcat выписать содержимое сервлета в виде файла bzip2 (возможно, необходимо глупое требование, но это, по-видимому, необходимо для некоторой работы по интеграции). Я использую фреймворк Spring, так что это в AbstractController.Запишите данные файла как Bzip2 для вывода ответа сервлета
Я использую библиотеку bzip2 из http://www.kohsuke.org/bzip2/
я могу получить содержимое сжатые bzip'ом хорошо, но когда файл записывается, кажется, содержит кучу мета-данных и неузнаваем в виде файла 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. –