通过Response下载。
之前一直在找js下载的插件,后来发现下载必须通过java后台处理,什么write(),open(),close()之类的方法。如果直接是通过<a>标签倒是简单的,直接将路径摆放在上面就可以。但是我不能这样,我需要双击下载,本质上就不是打开一个路径了,而是通过Response传入路径到后台处理数据了。
1、datagrid事件:
/*~~~~~~↓↓↓↓↓图片处理↓↓↓↓~~~~*/
$(function () {  
    $("#tp").datagrid({ 
    	//单击事件 查看图片
    	onClickRow: function (index, row) {  
    		var imgType = row.picUrl.substr(row.picUrl.lastIndexOf(".")+1);
    		var imgshow = row.picUrl;
    		if(imgType == 'dwg' || imgType == 'dxf' || imgType == 'dwt' || imgType == 'dws' || imgType == 'doc' || imgType == 'docx' || imgType == 'pdf'){
    			imgshow = "http://192.168.91.162/xian/demo/components/imgupload/images/icon_file.jpg";
    		}
        	document.getElementById("myImage").src=imgshow;
        },
//双击事件  下载
        onDblClickRow: function (index, row) {  
            window.location.href = "download.htm?filePath=" + row.picUrl + "&filename="+row.picUrl;
        }  
    });  
})
2、
download.jsp
import="java.io.InputStream,java.io.OutputStream,java.net.URLEncoder,java.net.URL,java.net.URLConnection"%>
<%
String filename = request.getParameter("filename");//获取文件的相对路径 
String filePath = request.getParameter("filePath");
//response.setHeader告诉浏览器以什么方式打开 //假如文件名称是中文则要使用 URLEncoder.encode()编码 //否则直接使用response.setHeader("content-disposition", "attachment;filename=" + filename);即可
response.reset();
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
response.setHeader("Content-Encoding", "binary");
response.setContentType("application/x-download");
URL url = new URL(filePath);
URLConnection urlconn = url.openConnection();
urlconn.setConnectTimeout(3000);
InputStream stream =urlconn.getInputStream();//获取文件的流 ,也可以这样:InputStream stream  = new FileInputStream(url);
OutputStream os=response.getOutputStream();//输出流
out.clear();
out=pageContext.pushBody();
byte[] b=new byte[1024];//缓存作用
int len=0;
while((len=stream.read(b))!=-1){ //整体上就是通过路径先获取流,放置在buffer中,然后遍历输出流。
    os.write(b,0,len);//向客户端输出,实际是把数据存放在response中,然后web服务器再去response中读取 
}
stream.close();
%>
当路径中出现中文会有FileNotFoundException,将其中的中文部分(一般是fileName)单独拿出来处理,不能将其他英文什么的一起处理,会有问题。
int separ=filePath.lastIndexOf("/");
String url_en=URLEncoder.encode(filePath.substring(separ+1),"utf-8"); 
System.out.println(filePath.substring(0,separ+1)+url_en);
URL url = new URL(filePath.substring(0,separ+1)+url_en);
火狐浏览器下载文件名中文乱码问题:
String userAgent = request.getHeader("User-Agent"); 
byte[] bytes = userAgent.contains("MSIE") ? filename.getBytes() : filename.getBytes("UTF-8"); // name.getBytes("UTF-8")处理safari的乱码问题  
filename = new String(bytes, "ISO-8859-1"); // 各浏览器基本都支持ISO编码
response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", filename));
通过Response下载。的更多相关文章
- Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载
		
使用Response下载文件,servlet中的文件下载是通过流来实现的 我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很 ...
 - 使用Response下载(支持任何格式)
		
使用Response下载 下面代码: protected void Button2_Click(object sender, EventArgs e) { Response.ContentType = ...
 - response下载csv文件内容乱码问题
		
response下载csv文件内容乱码问题 解决办法:在输出流语句第一行输出 out.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF}); Se ...
 - response下载文件  (转载)
		
核心代码: ? DataSet ds = dBll.GetList("ID=" + ID); ? string docName = "a.doc";//文件名, ...
 - android默认浏览器response下载PDF文件
		
下载出来的文件不是PDF,而是xxx.htm文件,原因是response的header配置有问题. android默认浏览器的情况下,header的配置应该写成.(java 为例) response. ...
 - servlet 中通过response下载文件
		
public class ResponseDemo3 extends HttpServlet { private static final long serialVersionUID = -52329 ...
 - C# Response 下载
		
//TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新 ...
 - C#中使用Response下载
		
正常流程 正常的从服务器端下载文件的流程 System.IO.FileInfo file = new System.IO.FileInfo(s_path); HttpContext.Current.R ...
 - response 下载文件
		
String basePath = "D://test.json"; String filename = basePath.substring(basePath.lastIndex ...
 
随机推荐
- Javascript:一些基本语法
			
便于日后复习快速回忆起来,把Javascript一些没那么普遍的语法特性写一写. Javascript作为三剑客的灵魂,我把它写在body里 <!DOCTYPE html> <htm ...
 - python-爬虫:取qq号中各分组成员信息存入数据库,并将qq头像下载保存到文件夹,图片命名为qq号(实例3)
			
import requestsimport pymongoimport requestsimport os class QqGroup:#三个接口url 获取 qq组号 获取每组成员信息 获取qq头像 ...
 - iOS-原生纯代码约束总结(二)之 AutoLayout
			
一,概述 AutoLayout相比AutoResizing更加实用,是可以完全替代AutoResizing的一种自动布局方式.而在使用AutoLayout前,我们必须理解一个属性,那就是transla ...
 - iOS更换科大讯飞的key
			
我这个APP使用了科大讯飞的"语音评测"功能,之前使用的是我自己注册的科大讯飞账号,在这个账号里面创建的APP,生成的key. 我们公司有公司的key, 同事说可以多个APP公用一 ...
 - AndroidsStudio_找Bug
			
新版本不再提供Android Monitor,但在Logcat中可以找到运行日志,但在Regex中要勾选Show only... 另外设置一个控件记得加id.
 - HTML5上传文件显示进度
			
下面我们使用Html 5的新特性file api实现上传文件,并显示上传文件进度百分比.意图是这样的,当选择文件时,显示当前文件信息.这里我们是结合Asp.net MVC做为服务端,您也可以是其它的服 ...
 - BZOJ1280 Emmy卖猪pigs 网络流
			
正解:网络流 解题报告: 传送门! 我网络流的基础题都还麻油做完就来做这个了,,,wsl,,, 首先想下最基础的构图方法 不难想到把猪圈和顾客分别当做节点,然后新建一个源点和汇点 然后考虑怎么连边,首 ...
 - TZOJ:玛祖游戏
			
描述 玛祖是一款非常经典的游戏,游戏的角色是一只青蛙,青蛙每次可以吐出一颗珠子,如果将珠子吐到场景中相同颜色的珠子旁边(称为击中),当三个或者三个以上的同颜色珠子在一起的时候便可以消掉,如果消掉后还有 ...
 - C# Asp.net使用FormData对象实现ajax提交表单及上传图片
			
1.html代码: <form id="postForm"> 文件名:<input type="text" name="filena ...
 - 不能往Windows Server 2008 R2 Server中复制文件的解决方法
			
目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度找到了解决方法,特此记录(记忆). 1.在任务管理器中找到“rdpclip.e ...