1、下载按钮,title是文件在项目中存储的名称
<span><a href="javascript:void(0);" title="模板.xlsx" class="m_but bg_b download_model">模板下载</a></span>
2、js处理,新建form表单提交
//导入模板下载
$(".download_model").bind("click",function(){
var form = document.createElement("form"); //创建一个 form
document.body.appendChild(form);//添加到 body 中
var input = document.createElement("input"); //创建一个输入
// 设置相应参数
input.type = "text";
input.name = "fileName";
input.value = $(this).attr("title");
form.appendChild(input);
form.method = "POST"; //form 的提交方式
form.action = "download_model";//form 提交路径
form.submit(); //对该 form 执行提交
form.remove();
});
3、后台处理
/**
* 导入模板下载
*
* @param req
* @param model
* @param response
*/
@SuppressWarnings("rawtypes")
@RequestMapping(value = "/download_model")
private void downloadModel(HttpServletRequest req, Model model, HttpServletResponse response) throws Exception {
Map<String, Object> params = builderParams(req, null);
String fileName = (String) params.get("fileName");// 文件名
String path = req.getSession().getServletContext().getRealPath("/download");// 此文件夹在webapp下
FileDownLoadUtil.downLoad(fileName, path, req, response);
}
/**
* 文件下载工具类
*
*/
public class FileDownLoadUtil {
public static void downLoad(String fileName, String filePath, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("UTF-8");
java.io.BufferedInputStream bis = null;
java.io.BufferedOutputStream bos = null;
String downloadPath = filePath + "/" + fileName;
File file = new File(downloadPath);
try {
long fileLength = file.length();
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));
bis = new BufferedInputStream(new FileInputStream(downloadPath));
//bis = new BufferedInputStream(new ByteArrayInputStream("testtest".getBytes("UTF-8")));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
throw new Exception(e);
} finally {
if (bis != null)
bis.close();
if (bos != null){
bos.flush();
bos.close();
}
}
}
}