java本地或者服务端文件下载

首先说一下最简单的下载,可以使用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(); 

以上两种方法二选一都可。希望可以对大家有帮助,有问题请留言。

猜你喜欢

转载自blog.csdn.net/Xiaodongge521/article/details/84771981