springmvc下载⽂件⽰例springmvc下载⽂件⽰例
使⽤递归获取所有⽂件名
下载⽂件⽅法
前台页⾯显⽰
js请求
1.递归代码块
/**
* 递归遍历指定⽬录下的所有⽂件
*
total函数* @param file
* @param map
*/
public void listfile(File file, Map<String, String> map) {
// 如果file代表的不是⼀个⽂件,⽽是⼀个⽬录
if (!file.isFile()) {
// 列出该⽬录下的所有⽂件和⽬录
vfp随机函数rand使用方法File files[] = file.listFiles();
// 遍历files[]数组
for (File f : files) {
listfile(f, map);
}
} else {
/
**
* 处理⽂件名,上传后的⽂件是以uuid_⽂件名的形式去重新命名的,去除⽂件名的uuid_部分
* Name().indexOf("_")检索字符串中第⼀次出现"_"字符的位置,如果⽂件名类似于:
* 9349249849-88343-8344_阿_凡_达.avi
* 那么Name().Name().indexOf("_")+1)
* 处理之后就可以得到阿_凡_达.avi部分
*/
String realName = Name().Name().indexOf("_") + 1);
// Name()得到的是⽂件的原始名称,这个名称是唯⼀的,因此可以作为key,realName是处理过后的名称,有可能会重复            map.Name(), realName);
}
}
@RequestMapping(value = "/listFile", method = { RequestMethod.GET,
RequestMethod.POST }, produces = "application/json;charset=UTF-8")
public @ResponseBody Map<String, String> listFile() {
// 获取上下⽂⽬录
ServletContext sc = ServletContext();
// ⽂件位置
String uploadFilePath = sc.getRealPath("/images") + "/";
System.out.println("查看⽂件位置:" + uploadFilePath);
// 存储要下载的⽂件名
Map<String, String> fileNameMap = new HashMap<String, String>();
// 递归遍历filepath⽬录下的所有⽂件和⽬录,将⽂件名存储到map集合中
listfile(new File(uploadFilePath), fileNameMap);
return fileNameMap;
}
脚注
web对象请求是WebApplicationContext web = CurrentWebApplicationContext();
2.下载⽂件⽅法代码块
/**
* ⽂件下载⽅法
*
* @param request
* @param request
* @param response
*/
django上传图片显示
@RequestMapping(value = "/downFile", produces = "application/json;charset=UTF-8")
public @ResponseBody String downFile(@RequestParam("filename") String filename, HttpServletResponse response) {
System.out.println("进⼊下载⽅法" + filename);
// 获取上传⽂件的⽬录
ServletContext sc = ServletContext();
try {
//filename = new Bytes("ISO8859-1"), "UTF-8");
String fileSaveRootPath = sc.getRealPath("/images");
// 得到要下载的⽂件
File file = new File(fileSaveRootPath + "\\" + filename);
// 如果⽂件不存在
if (!ists()) {
System.out.println("资源已删除");
return"您要下载的资源已被删除!!";
}
// 处理⽂件名
String realname = filename.substring(filename.indexOf("_") + 1);
System.out.println("查看处理⽂件名:" + realname);
// 设置响应头部,控制浏览器下载⽂件
response.setHeader("Content-Disposition", "attachment;filename=" + de(realname, "UTF-8"));
// 读取下载的⽂件,保存到⽂件输⼊流中
FileInputStream in = new FileInputStream(fileSaveRootPath + "\\" + filename);
// 创建⽂件输出流
OutputStream out = OutputStream();
// 创建缓冲区
网页制作header什么意思
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输⼊流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输⼊缓冲去的内容到浏览器,实现⽂件下载
out.write(buffer, 0, len);
}
in.close();
out.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
/
/ TODO Auto-generated catch block
e.printStackTrace();
}
return"下载成功";
return"下载成功";
}
脚注
编码容易出现乱码问题,需统⼀编码格式
3.前台页⾯显⽰代码块
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>下载⽂件测试•</title>
</head>
<#assign ContextPath()>
<script type="text/javascript"
src="${context}/statics/baseJs/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
var context = "${context}";
</script>
<script type="text/javascript" src="${context}/statics/js/download.js"></script>
<style>
.div {
width: 30%
nvenc配置}
.div p {
width: 50%;
margin: 0px;
float: left;
}
</style>
<body>
<div>测试下载</div>
<div class="div" id="test"></div>
</body>jquery下载文件请求
</html>
脚注
因为使⽤freemarker,基本项⽬都是html,在⽤freemarker标签获取上下⽂配置时,需在配置⽂件中添加下⾯代码
<!-- 获取request -->
<property name="requestContextAttribute"value="request" />
4.js请求代码
$(function() {
$.ajax({
url : context + "/file/listFile",
type : "post",
success : function(data) {
var div = "";
$.each(data, function(i, n) {
div += "<div><p>" + n + "</p><a href='" + context
+ "/file/downFile?filename=" + n + "'>下载</a></div>";
})
$("#test").append(div);
}
})
})
脚注
习惯使⽤jQuery的ajax请求,发过来的json可以把url请求也封装好,a标签上出现乱码⼀般情况是编码不统⼀的问题第⼀次发博客,写的应该不详细,请多谅解

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。