我正在使用以下通过ajax调用调用的代码来创建我的excel文件。单击下载按钮excel文件在根位置生成。但我无法看到用户保存/另存为文件的提示。我可以看到excel的内容即将到来的浏览器的响应选项卡。但我想要另存为“另存为”对话框选项。以下代码中的任何修正都可以解决这个问题吗?
final Date date = new Date();
final String generateDate= new SimpleDateFormat("yyyy-MM-dd").format(date);
final String filename = form_name+"-extraction-"+generateDate.toString()+".xls";
final FileOutputStream fileOutputStream = new FileOutputStream(filename);
workbook.write(fileOutputStream);
downloadFile(filename, response);
下面是下载文件方法:
private void downloadFile(final String fileName, final SlingHttpServletResponse response){
try {
final File f = new File(fileName);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "inline; filename="+fileName);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
FileInputStream fin = null;
try {
fin = new FileInputStream(f);
} catch (final FileNotFoundException e) {
e.printStackTrace();
}
final int size = 1024;
try {
response.setContentLength(fin.available());
final byte[] buffer = new byte[size];
ServletOutputStream os = null;
os = response.getOutputStream();
int length = 0;
while ((length = fin.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
fin.close();
os.flush();
os.close();
} catch (final IOException e) {
e.printStackTrace();
}
}catch (final Exception ex){
LOGGER.error("ERROR IS ::: {}",ex.getMessage());
}
答案 0 :(得分:1)
如果处置类型匹配"附件" (不区分大小写), 这表示收件人应提示用户保存 在当地做出反应,而不是正常处理(根据其媒体而言) 类型)。
另一方面,如果匹配"内联" (不区分大小写), 这意味着默认处理。因此,配置类型 "直列"只有在使用附加功能进行扩充时才有用 参数,例如文件名(见下文)。
未知或未处理的处置类型应由
处理 收件人的方式与"附件"相同(另见[RFC2183],
第2.8节。
因此,您强制浏览器显示该文件,而不是使用您的
下载它response.setHeader("Content-Disposition", "inline; filename="+fileName);
呼叫。您应该使用"附件" 而不是"内联"。
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
阅读Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)了解详情。
答案 1 :(得分:0)
如果在Excel中填充了以前搜索过的数据输出,则应删除静态声明。例如:
private static hasmap hs = new hashmap();