Skip to content

Instantly share code, notes, and snippets.

@kentyeh
Last active August 29, 2017 02:16
Show Gist options
  • Save kentyeh/eef1bf6d80528349b45800ea3e5fb5f7 to your computer and use it in GitHub Desktop.
Save kentyeh/eef1bf6d80528349b45800ea3e5fb5f7 to your computer and use it in GitHub Desktop.
force download in servlet
public class DownloadAction extends Action {
public void downloadXls(HttpServletRequest request,HttpServletResponse response){
WritableWorkbook workbook = Workbook.createWorkbook(response.getOutputStream());
//....Genrate Xls
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
//starts with "attachment;" means force download,otherwise "inline;" instaed means view in browser
if(request.getHeader("User-Agent").contains("Trident/7.0") || request.getHeader("User-Agent").contains("MSIE")){
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode("資料.xls","utf-8"));
} else {
response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s.xls\"",
MimeUtility.encodeWord("資料")));
}
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Connection", "close");
workbook.write();
workbook.close();
}
public void downloadPdf(HttpServletRequest request,HttpServletResponse response){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, baos);
//... generate Pdf document
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");
if(request.getHeader("User-Agent").contains("Trident/7.0") || request.getHeader("User-Agent").contains("MSIE")){
response.setHeader("Content-Disposition","attachment; filename="+URLEncoder.encode("資料.pdf","utf-8"));
} else {
response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s.pdf\"",
MimeUtility.encodeWord("資料")));
}
response.setContentLength(baos.size());
try (OutputStream os = response.getOutputStream()) {
baos.writeTo(os);
os.flush();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment