java下载文件
一、前台通过a标签打开接口,传入文件id
<a href="/cdc/announcement/downloadFile/1">下载</a>
二、后台接收id,查找对应文件,进行下载
@requestMAPPing(value = "downloadFile/{id}", method = RequestMethod.GET)
@PreAuthorize("hasAuthority('view')")
@responseBody
public void downloadFile(HttpServletRequest req, HttpServletResponse resp, @PathVariable("id") Long id) {
AnnouncementAnnex announcementAnnex = announcementAnnexService.selectById(id);
//真实文件名
String name = announcementAnnex.getAnnexUrl();
String downloadName=announcementAnnex.getAnnexName();
// 进行转码后的文件名,用来下载之后的文件名
Publiccontroller.download(resp,name,downloadName);
}
其中download方法
/**
* @param resp
* @param name 文件真实名字
* @param downloadName 文件下载时名字
*/
public static void download(HttpServletResponse resp, String name, String downloadName) {
String fileName = null;
try {
fileName = new String(downloadName.getBytes("GBK"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printstacktrace();
}
///home/tomcat/apache-tomcat-9.0.1/files
String realPath = "D:" + File.separator + "apache-tomcat-8.5.15" + File.separator + "files";
// String realPath=File.separator+"home"+File.separator+"tomcat"+File.separator+"apache-tomcat-9.0.1"+File.separator+"files";
String path = realPath + File.separator + name;
File file = new File(path);
resp.reset();
resp.setcontentType("application/octet-stream");
resp.setCharacterEncoding("utf-8");
resp.setContentLength((int) file.length());
resp.setHeader("content-Disposition", "attachment;filename=" + fileName);
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
outputstream os = null;
try {
os = resp.getOutputStream();
bis = new BufferedInputStream(new fileinputstream(file));
int i = 0;
while ((i = bis.read(buff)) != -1) {
os.write(buff, 0, i);
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
fileName是文件下载之后的名字,filePath是文件所在文件夹地址,path是文件地址,注意设置的响应类型和编码方式
其中File.separator为路径分隔符,他能自动识别是哪个操作系统而使用不同的路径分隔符(windows是‘\’,linux是‘/’)。
相关阅读
微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站。作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中
原文地址:https://blog.csdn.net/qwfylwc/article/details/53939906 下面列举让你惊讶的现象,或许你还一直这么用: 1、使用Math.roun
汉字转拼音缩写的函数(VB)Public Function getPYChar(char As String) As StringDim lChar As LonglChar = 65536 +
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。 算法分析 在学习堆排序之前我们要先
系统版本:Win10 64位JDK版本:jdk1.8.0_171开发工具:Eclipse 问题描述:在cmd中使用命令java HelloWorld时,提示“找不到或无法加载主类