首先说一下最简单的下载,可以使用a标签中的download属性,直接可下载。
例如:下面链接,href写文件或者图片的地址,后面跟上download属性即可,"="后面是定义下载文件的名称。
<a href="/images/myw3schoolimage.jpg" download="w3logo">
就这么简单,大家上传或者下载完了后,可以给表中专门加一个字段来存放地址,这样呢就很方便提供大家直接找到文件了。
下面继续说下载本地的方法:
页面呢就是统一点击按钮,触发事假执行:
function downloadTemplate(id){
window.location.href = "/****/****/****?templateId="+id;
}
java代码
Template template = iTemplateService.queryTemplate(templateId);
if (null == template) {
logger.info("template为空,加载模板失败");
/* rtnMap.put("errMsg", "加载失败,请稍微再试");
return JsonUtils.toJsonNoException(rtnMap);*/
}
// 下载本地文件
String fileName = template.getName()+".xml".toString(); // 文件的默认保存名
// 读到流中
InputStream inStream = new FileInputStream(template.getPath());// 文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
try {
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// path是根据日志路径和文件名拼接出来的
File file = new File(template.getPath());
String filename = file.getName();// 获取日志文件名称
InputStream fis = new BufferedInputStream(new FileInputStream(template.getPath()));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
response.reset();
// 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.replaceAll(" ", "").getBytes("utf-8"),"iso8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
os.write(buffer);// 输出文件
os.flush();
os.close();
以上两种方法二选一都可。希望可以对大家有帮助,有问题请留言。