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