展示页面
html页面
项目使用的是VM页面 $!promotion.enclosure 为文件名称。
<input type="button" id="toExecl" onclick="downxxxEnclosure('$!promotion.enclosure')" value="下载内容">
js代码
需注意因为文件可能不存在 所以使用的是先用ajxa异步查询文件是否存在
function downxxxEnclosure(name){
$.ajax({
url:"/xxx/checkxxxEnclosure",
data:{name:name},
async:false,
success:function(data){
//检查文件格式和是否存在
if(data){
if (window.confirm("确认下载?")) {
location.href='/xxx/downxxxEnclosure?name='+name;
}
}else{
alert("下载内容格式有问题或不存在!")
}
}
});
}
关联ajax
第一步执行
url:"/xxx/checkxxxEnclosure",
data:{name:name},
file.exists()判断是否存在的文件或者文件夹如果有返回true
java代码
/**检查下载附件是否存在*/
@RequestMapping("/checkxxxEnclosure")
public @ResponseBody Boolean checkxxxEnclosure(String name){
try{
File file = new File(path+name);
if (file.exists()) { // 文件存在
return true;
}else {
return false;
}
}catch (Exception e){
log.error("",e);
}
return false;
}
此处path为文件存放的路径
使用的是配置文件的方式
路径和文件内容拼接在一起
第二步执行
if (window.confirm("确认下载?")) {
location.href='/xxx/downxxxEnclosure?name='+name;
}
关联java代码
/**推广下载附件*/
@RequestMapping("/downxxxEnclosure")
public String downxxxEnclosure(String name,HttpServletResponse response){
try{
/* 第一步:根据文件路径获取文件 */
File file = new File(path+name);
if (file.exists()) { // 要通过file.exists()判断是否存在test命名的文件或者文件夹,如果返回true
/* 第二步:根据已存在的文件,创建文件输入流 */
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
/* 第三步:创建缓冲区,大小为流的最大字符数 */
byte[] buffer = new byte[inputStream.available()]; // int available() 返回值为流中尚未读取的字节的数量
/* 第四步:从文件输入流读字节流到缓冲区 */
inputStream.read(buffer);
/* 第五步: 关闭输入流 */
inputStream.close();
String fileName = file.getName();// 获取文件名
response.reset();
response.addHeader("Content-Disposition",
"attachment;filename=" + new String(fileName.getBytes("utf-8"), "iso8859-1"));
response.addHeader("Content-Length", "" + file.length());
/* 第六步:创建文件输出流 */
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
/* 第七步:把缓冲区的内容写入文件输出流 */
outputStream.write(buffer);
/* 第八步:刷空输出流,并输出所有被缓存的字节 */
outputStream.flush();
/* 第九步:关闭输出流 */
outputStream.close();
}else {
return redirect("/xxx/list");
}
}catch (Exception e){
log.error("",e);
}
return redirect("/xxx/list");
}
为了避免文件找不到问题,返回至特定页面
else {
return redirect("/xxx/list");
}
java代码部分根据原帖http://blog.youkuaiyun.com/dreamstar613/article/details/55260481改进!