javaweb jsp页面中实现文件下载

在jsp中有一个a标签 ,当用户点击a标签的时候下载文件。

我们采用href属性直接指向一个服务器地址,只要链接的文件存在,就会给出弹出保存对话框.

点击a标签 先执行onclick事件,再请求href中指向的地址。

前端jsp:

<a href="#" οnclick="javascript:downloadtest('${app.id}')"  id="pluginurl"  style="color: #83AFE2;text-decoration:underline;"></a>

然后在js中:

 function downloadtest(id){
var url = "<%=request.getContextPath()%>/app/download" + "/" + id;
$("#pluginurl").attr("href",url);
}


后台java代码: 我的是springmvc

/**
	 * 下载文件
	 * @param id appid
	 * @param response
	 */
	@RequestMapping(value="/download/{id}")
	public void download(@PathVariable String id, HttpServletResponse response){
		String filepath = "";
		Result result = appService.getAppById(id);
		App app = (App) result.getMap().get("app");
		if(app == null){
			return;
		}
		filepath = app.getUrl();
		
		File file = new File(filepath);
		InputStream inputStream = null;
		OutputStream outputStream = null;
		byte[] b= new byte[1024];
		int len = 0;
		try {
			inputStream = new FileInputStream(file);
			outputStream = response.getOutputStream();
			
			response.setContentType("application/force-download");
			String filename = file.getName();
			filename = filename.substring(36, filename.length());
			response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
			response.setContentLength( (int) file.length( ) );
			
			while((len = inputStream.read(b)) != -1){
				outputStream.write(b, 0, len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(inputStream != null){
				try {
					inputStream.close();
					inputStream = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(outputStream != null){
				try {
					outputStream.close();
					outputStream = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

注意:response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));


这句必须将文件名字编码一下,不然对于中文名字可能会出现乱码,或者不显示中文名只有后缀。


代码分析,我项目里面先通过id查找对应的bean对象,然后这个对象里面url保存的是服务器端文件系统中的地址比如:“C://download/test.txt”

因为本项目中文件上传的时候保存在服务器文件系统中的,而数据库中保存服务器文件系统地址就可以了。

最主要的是将文件写到输出流中,而且要设置response.addHeader 和 response.setContentLength属性。




  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值