站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题jsp中如何设置xls的超级链接,使用户点击时出现下载对话框,而不是在网页中打开?

jsp中如何设置xls的超级链接,使用户点击时出现下载对话框,而不是在网页中打开?

摘要: jsp中如何设置xls的超级链接,使用户点击时出现下载对话框,而不是在网页中打开?


如题。我在网页中通过jsp调用poi生成了一个excel文件。然后设置了一个超级链接指向了它。但是发布后,当用户点击它时,却在IE中打开了它,而不是出现了下载的提示。我该如何解决这个问题。
<% // 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 在Excel工作簿中建一工作表,其名为缺省值
HSSFSheet sheet = workbook.createSheet();
// 在索引0的位置创建行(最顶端的行)
HSSFRow row = sheet.createRow((short)0);
//在索引0的位置创建单元格(左上端)
HSSFCell cell = row.createCell((short) 0);
// 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
// 在单元格中输入一些内容
cell.setCellValue("测试");
// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(application.getRealPath("/") + "test.xls");
// 把相应的Excel 工作簿存盘
workbook.write(fOut);
fOut.flush();
// 操作结束,关闭文件
fOut.close();%>
test.xls



简单的办法:
在web.xml文件中加入


xls
application/x-msexcel


即可


我使用的办法:

public void annnexDownload(String annexID, HttpServletResponse response)
{
if (null == annexID || response == null)
{
return;
}

EnterAnnex annextmp = new EnterAnnex();
List list = annextmp.getAnnexData(annexID);
EnterAnnex annex = (EnterAnnex) list.get(0);

try
{
// 读取文件并且设置相关参数
File file = new File(annex.getAnnexFullDiskAddress());

String annexMimetype = getAnnexMimeType(annex.getName());

response.setContentType(annexMimetype);
response.setDateHeader("expires", 0);
response.setHeader("pragma", "private");
response.setHeader("Content-Type", annexMimetype);

// 中文文件名必须字符转换
response.setHeader("Content-disposition", "inline;filename="
+ new String(annex.getName().getBytes("gb2312"),
"iso8859-1"));

// 构造输入流
FileInputStream in = new FileInputStream(file);

// 构造一个输出流,用于把输入流读入到内存
ByteArrayOutputStream array = new ByteArrayOutputStream();

// 构造一个临时字节数组,每次从输入流读取数组长度的字符,放入输出流,直到输入流的末尾(返回值为-1)
byte[] tmp = new byte[1024];
while (in.read(tmp) != -1)
{
array.write(tmp);
}
in.close();

// 把输出流转换成字节数组,并把字节数组放入response
byte[] data = array.toByteArray();
array.reset();

ServletOutputStream op = response.getOutputStream();
op.write(data);
response.flushBuffer();

int length = data.length;
response.setContentLength(length);
}
catch (Exception e)
{
}
}




mark


多谢,用第一种办法把问题解决了!


↑返回目录
前一篇: 请教大家一个非常简单的问题(Struts中消息资源bundle指定问题),即时结贴!
后一篇: iso-8859-1编码解析不了"彧"这个字,该怎么处理啊?急等待