原文链接:https://blog.csdn.net/m0_51496483/article/details/122124567
普通的下载功能,不过依然有一个值得关注的重要点……请看到最后!
***HTML***按钮就不上了,你开心设计成button和a我都没有意见;
***JS***代码:
function downLoad(){
self.location='def/downLoadWord.do';
// $.ajax({
// type: "POST",
// url: 'def/downLoadWord.do',
// dataType:'json',
// cache: false,
// success: function(data){
// }
// });
}
1
2
3
4
5
6
7
8
9
10
11
12
***JAVA***接口:
/**
* 下载word文档
*
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value = "/downLoadWord")
@ResponseBody
public void downLoadWord(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
String path = "/home/iceberg/webApp/piccEdw/icerbergFile/MetadataUserManual.docx";
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
哎,就这么个下载功能,我整了一个多小时,为什么呢?因为最开始用的ajax请求,代码也走了,文件也读了,就是没下载……后来,我终于学会了,如何去……啊呸,后来,我灵机一动,改了个请求方式,就完美了~这是为什么呢?为什么呢?……小菜鸟的灵魂颤抖……