@RequestMapping("/filedown1/{id}")
public void down(@PathVariable String id, HttpServletResponse response) throws Exception {
BudgetAttendance bugdet = new BudgetAttendance();
try {
bugdet = budgetAndAttendanceManageService.findBudgetById(new Long(id));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String fileName = bugdet.getFileName();
String filePath = bugdet.getFilePath();
String[] split = fileName.split("\\.");
int suffixIndex = split.length - 1;
String enctype = new String(split[suffixIndex].getBytes(), "ISO8859-1");
File file = realFile(fileName, filePath);
String fileCnName = new String(file.getName().getBytes("utf-8"), "iso8859-1");
// 设置输出的格式
response.reset();
response.setContentType("\"" + enctype + "\"");
//filename前端取22个字符不变
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileCnName + "\"");
// 必须设置响应内容大小
response.addHeader("Content-Length", String.valueOf(file.length()));
byte[] buffer = new byte[1024];
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(new FileInputStream(file));
OutputStream os = response.getOutputStream();
int i;
while ((i = bis.read(buffer)) != -1) {
os.write(buffer, 0, i);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//一定要关闭文件流。并且关闭文件流必须放在finally里面
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@GetMapping("/download")
@ResponseBody
public void download(HttpServletResponse response, @RequestParam(name = "fileName") String fileName,
@RequestParam(name = "filePath") String filePath)
throws Exception {
//File zipFile = zipFiles(fileName, filePath);
File zipFile = realFile(fileName, filePath);
String fileCnName = new String(zipFile.getName().getBytes("utf-8"), "iso8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileCnName);
response.setContentType("application/force-download");
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(zipFile);
BufferedInputStream 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);
}
bis.close();
fis.close();
//zipFile.delete();
}
private File realFile(String fileName, String filePath) throws Exception {
File realFile = new File(filePath);
File showFile = new File(fileName);
InputStream fis = null;
OutputStream fos = null;
byte[] bt = new byte[1024];
try {
fis = new FileInputStream(realFile);
fos = new FileOutputStream(showFile);
int read = 0;
while ((read = fis.read(bt)) > 0) {
fos.write(bt, 0, read);
}
} catch (Exception e) {
throw new RuntimeException("文件下载异常");
} finally {
fis.close();
fos.close();
}
return showFile;
}
private File zipFiles(String fileName, String filePath) throws Exception {
List<File> files = new LinkedList<>();
File realFile = new File(filePath);
File showFile = new File(fileName);
InputStream fis = null;
OutputStream fos = null;
byte[] bt = new byte[1024];
try {
fis = new FileInputStream(realFile);
fos = new FileOutputStream(showFile);
int read = 0;
while ((read = fis.read(bt)) > 0) {
fos.write(bt, 0, read);
}
} catch (Exception e) {
throw new RuntimeException("文件下载异常");
} finally {
fis.close();
fos.close();
}
files.add(showFile);
String zipName = UUID.randomUUID().toString() + ".zip";
return FilesUtils.zipFiles(files, getUploadPath(), zipName);
}