文件远程下载和查看


最近公司要求做个传真的下载查看 由于之前未做过类似的远程直接下载到客户端,于是在网上找了相关资料,结果千篇一律,差不多都是你抄我我抄你的,都是服务器下载到服务端而不是直接服务器下载到用户浏览器端,研究了一天,写了个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();

            }

5、查看传真时 需要判断是否有插件可以直接打开传真文件

<%@ 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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值