/**
* 下载文件
* @param fileUrl 文件路径
* @param name 文件名称
* @param expires 有效期
* @throws Exception
*
*/
@RequestMapping(value = "download")
@ResponseBody
public void download(HttpSession session,HttpServletRequest request,HttpServletResponse response) throws Exception{
String signature = request.getParameter("signature").replace(" ", "+");
String expires = request.getParameter("expires").replace(" ", "+");
Long currentTimes = System.currentTimeMillis();
String deExpires = DesECBUtil.decryptDES(expires, "");
String deSignature = DesECBUtil.decryptDES(signature, "");
if(currentTimes - Long.parseLong(deExpires) <= 24*3600*1000){//session判断是否有权限,代码略
// String dataDirectory = request.getServletContext().getRealPath("/WEB-INF/data");
String fileName = deSignature.split("/")[deSignature.split("/").length - 1];
String url = "";
for (int i = 0; i < deSignature.split("/").length; i++) {
if(i < deSignature.split("/").length - 1){
url += deSignature.split("/")[i] + "/";
}
}
File file = new File(url, ""+fileName);
log.info("deSignature:"+deSignature+"##fileName:"+fileName);
if(file.exists()) {
// String str1=fileName.substring(0, fileName.indexOf("\\."));
// String str2=fileName.substring(str1.length()+1, fileName.length());
response.setContentType("application/"+fileName.split("\\.")[1]);
//避免下载文件名乱码
response.addHeader("Content-Disposition", "attachment; filename="+(new String(fileName.getBytes("UTF-8"), "ISO8859-1")));
byte[] buffer = new byte[1048576];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while(i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch(IOException ex) {
//处理异常
} finally {
if(bis != null) {
try {
bis.close();
} catch(IOException e){
}
if(fis != null) {
try {
fis.close();
} catch (IOException e){
}
}
}
}
}}
}