通过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 ...
随机推荐
- [No0000D6]端口-进程查询.bat
@echo off color a Title XP端口-进程查询 setlocal enabledelayedexpansion echo ╔- -╗ echo 本机开放的端口及使用该端口的进程 e ...
- UIScrollView的一些关系
contentInsets和contentoffset以及contentSize 可见范围: contentSize + contentInsets 也就是(contentSize.width+con ...
- Linux的磁盘系统和文件系统显示的文件大小为什么不一样(du指令和ls指令的区别)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- 内部排序->其它->地址排序(地址重排算法)
文字描述 当每个记录所占空间较多,即每个记录存放的除关键字外的附加信息太大时,移动记录的时间耗费太大.此时,就可以像表插入排序.链式基数排序,以修改指针代替移动记录.但是有的排序方法,如快速排序和堆排 ...
- 应用docker化
1)首先安装源代码工具Git. [root@master~]# yum install-y git 2)从GitHub上下载示例的Java应用源代码. [root@master~]# cd/op ...
- SQL函数汇总大全
聚合函数对一组值计算后返回单个值.除了count(统计项数)函数以外,其他的聚合函数在计算式都会忽略空值(null).所有的聚合函数均为确定性函数.即任何时候使用一组相同的输入值调用聚合函数执行后的返 ...
- 【PyQt5-Qt Designer】QMessageBox 弹出框总结
QMessageBox QMessageBox类中常用方法 方法 描述 information(QWdiget parent,title,text,buttons,defaultButton) 弹出 ...
- eslint 代码检测工具
jshint 检测工具不够灵活下,道格拉斯(何许人也?json创造者,javascript重要任务,犀牛那本书就是他写的). 文档地址: 中文地址 English 安装 利用npm全局安装eslint ...
- Sql批量修改帝国cms文章发布时间(需unix时间,否则会变为1970-01-01)
在迁移网站时,有时我们需要将帝国cms文章发表时间批量修改为当前时间,在帝国cms后台→系统设置→备份与恢复数据→执行sql语句: update phome_ecms_news set newstim ...
- 20180824 SSRS Line Chart 绘制
(很多时候我都会只记录遇到的问题点,很少详细的写整个过程) 1. 安装ReportBulider 客户端,不需要填写server url ,可以先放空,后面再维护. 安装包官网可以下载,是免费的,现在 ...