1、首先如果要获取javaweb项目中的文件在哪,用到的代码:request.getSession().getServletContext().getRealPath("/WEB-INF/down/花销数据导入模板.xlsx"),这样就能获得在WEB-INF文件夹下的down文件夹下的"花销数据导入模板.xlsx"文件。
2、如果要下载的文件带有中文会出现下载下来的文件文件名乱码的情况,此时用到如下代码:
response.setContentType("application/msexcel"); //下面三行是关键代码,处理乱码问题
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment; filename="+new String(fileName.getBytes("gbk"), "iso8859-1")+".xls");
3、下载项目自带模板后台代码如下(springmvc+mybatis框架):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
/**
* 下载模板
* @author dxy *
* @param request
* @param response
* @throws Exception
*/
@RequestMapping
(
"downLoadTemplate"
)
@Action
(description=
"编辑补贴项目"
)
public
void
downLoadTemplate(HttpServletRequest request,HttpServletResponse response)
throws
Exception{
String path = request.getSession().getServletContext().getRealPath(
"/down/花销数据导入模板.xlsx"
);
File file =
new
File(path);
String filename = file.getName();
// 获取文件名称
InputStream fis =
new
BufferedInputStream(
new
FileInputStream(path));
byte
[] buffer =
new
byte
[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
// 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
response.addHeader(
"Content-Disposition"
,
"attachment; filename="
+
new
String(filename.getBytes(
"gbk"
),
"iso8859-1"
));
response.addHeader(
"Content-Length"
,
""
+ file.length());
OutputStream os =
new
BufferedOutputStream(response.getOutputStream());
response.setContentType(
"application/octet-stream"
);
os.write(buffer);
// 输出文件
os.flush();
os.close();
}
|