标签:
最近公司要求做个传真的下载查看 由于之前未做过类似的远程直接下载到客户端,于是在网上找了相关资料,结果千篇一律,差不多都是你抄我我抄你的,都是服务器下载到服务端而不是直接服务器下载到用户浏览器端,研究了一天,写了个HTTP下载 和IIS远程查看 代码如下:
(一)前台:JS访问Servlet
//查看传真 showFile:function(time,num){ window.open("/FaxServlet?creatTime="+time+"&faxnum="+num+"&tag=1", "_blank"); } //下载传真 downloadFile:function(time,num){ window.open("/FaxServlet?creatTime="+time+"&faxnum="+num+"&tag=2", "_blank"); }
(二)后台:servlet处理
1、首先通过读取配置文件 获取数据库地址
Properties props = new Properties(); InputStream fis = FaxServlet.class.getResourceAsStream("/jdbc.properties"); props.load(fis); String servurl = props.getProperty("SQLServerjdbc.addr");2、获取前台传递的数据
String creattime = request.getParameter("creatTime"); String faxnum = request.getParameter("faxnum"); //tag标志 1为查看 2为下载 String tag = request.getParameter("tag");3、查询数据库获取需要查看或者下载的文件名 这块代码就省略了
4、对查看或下载进行操作
if (tag.equals("1")) { //此处设置属性 inline的目的是为了设置文件在浏览器中打开 response.setHeader("Content-Disposition", "inline; filename=" + filename); request.setAttribute("url_1", servurl + filename); request.getRequestDispatcher(jsp_url).forward(request, response); } //下载 if (tag.equals("2")) { URL url = new URL(servurl + filename); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); BufferedInputStream ins = new BufferedInputStream(conn.getInputStream()); response.reset(); //设置以流的形式下载文件 response.setContentType("application/octet-stream"); //设置 attachment 文件作为附件形式下载 response.setHeader("Content-Disposition", "attachment; filename=" + filename); int i; byte[] buffer = new byte[4 * 1024]; while ((i = ins.read(buffer)) > 0) { response.getOutputStream().write(buffer, 0, i); } ins.close(); response.getOutputStream().close(); conn.disconnect(); }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> //CLSSID是插件的ID <object width="100%" height="100%" id=obj1 classid="CLSID:106E49CF-797A-11D2-81A2-00E02C015623"> <param name=src value="<%=request.getAttribute("url_1") %>"> <param name="mousemode" value="pan"/> <a href="/alternatiffx-1_8_2.zip">请下载插件</a> </object> <script type="text/javascript"> if(document.all.obj1.object==null){ alert("请下载插件"); } </script>
标签:
原文地址:http://blog.csdn.net/qq_28214879/article/details/51331671