在网络上,假设我们超链接地址对应于jpg档,txt档,点击链接,默认浏览器打开这些文件,而不是下载,那么,你如何实现竞争力的默认下载。

1.可通过自己写一个download.jsp来实现

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.net.*"%>
<%
//得到文件名称字和路径
String filename = request.getParameter("filename");
String filepath = request.getParameter("filepath");
String displayfilename = URLEncoder.encode(filename,"UTF-8");
try {
response.setContentType("application/x-download");
response.setHeader("Content-Disposition","attachment;filename=\"" + displayfilename + "\"");
//HttpServletContext httpServletContext = (HttpServletContext)application;
RequestDispatcher dis = application.getRequestDispatcher(filepath + filename);
//application.getRequestDispatcher(url)这里的url仅仅能是相对路径,如/upload/1.jpg
if (dis != null) {
dis.forward(request,response);
}
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
System.out.println("下载取消:" + filepath + filename);
}
out.clear();
out = pageContext.pushBody();
%>

当我们要链接图片(或其它浏览器默认打开的格式,这里以图片为例)时。把相应的文件名称和地址传入download.jsp的filename和filepath參数里。详细写法例如以下

<a class="blue-line-a" href=" /PackTool/download.jsp?

filename=WinGUI.exe&filepath=/other/WinGUI.exe">/other/WinGUI.exe</a>

通过这样方式,我们就能实现文件的默认下载了,而不是浏览器的默认打开。

2.通过文件输出流方式(推荐):

<%@ page language="java" contentType="application/x-msdownload"    pageEncoding="UTF-8"%>
<%@ page import="java.net.*"%>
<%@ page import="java.io.*"%>
<%@ page import="com.hikvision.modules.guide.util.*"%>
<%
//关于文件下载时採用文件流输出的方式处理:
//加上response.reset(),而且全部的%>后面不要换行。包含最后一个;
String filename = request.getParameter("filename");
String filepath = request.getParameter("filepath");
response.reset();//能够加也能够不加
response.setContentType("application/x-download");
//"想办法找到要提供下载的文件的物理路径+文件名称";D:/PackTools/shareFolder
String filedownload = GetSharePathXml.getShareFolderPath() + filename;
//"给用户提供的下载文件名称"
String filedisplay = filename;
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filedisplay); OutputStream outp = null;
FileInputStream in = null;
try
{
outp = response.getOutputStream();
in = new FileInputStream(filedownload); byte[] b = new byte[1024];
int i = 0; while((i = in.read(b)) > 0)
{
outp.write(b, 0, i);
}
outp.flush();
}
catch(Exception e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
{
if(in != null)
{
in.close();
in = null;
}
if(outp != null)
{
outp.close();
out.clear();
outp = null;
}
}
%>

版权声明:本文博主原创文章。博客,未经同意不得转载。

图画(txt等一下)实施开放的默认下载的默认浏览器,而不是(Java文本)的更多相关文章

  1. 取消IE默认下载工具为迅雷

    需求:企业访问内部WEB系统下载文件时,IE默认下载工具设置为迅雷,则弹出迅雷下载框.现需要直接弹出IE下载保存框. 方案:打开迅雷,进行撤销默认下载工具. 1.迅雷5: 1.1. 打开迅雷下载工具 ...

  2. 设置IE浏览器的默认下载路径

    实现效果: 知识运用: Default Download Directory键 实现代码: private void button2_Click(object sender, EventArgs e) ...

  3. Ubuntu 16.04安装uGet替代迅雷,并在Chrome中设置为默认下载器

    uGet是采用aria2作为下载后端,所以两个软件都必须同时安装. 1.安装uGet sudo add-apt-repository ppa:plushuang-tw/uget-stable sudo ...

  4. (转)Jupyter默认目录和默认浏览器修改

    目录 1.总结:修改Anaconda中的Jupyter Notebook默认工作路径的三种方式 # 2.Jupyter默认目录和默认浏览器修改 1.总结:修改Anaconda中的Jupyter Not ...

  5. Tensorflow2.0默认下载数据集到C盘的修改方法

    jupyter(Win版本)下载数据集会默认到C盘下,Linux会默认到root下,修改方式如下· tf1.x: import os import tensorflow as tftf.disable ...

  6. 修改安卓AVD虚拟机的默认下载路径

    因为安卓虚拟机的默认下载路径是在C盘,会在C盘中的.android文件中下载虚拟机,非常的占用C盘的宝贵资源,而且我发现这个.android文件即使删掉,只要打开AndroidStudio软件,它就会 ...

  7. 1、怎样设置C#OpenFileDialog(文件选择窗体)的指定路径、文件格式等属性(设置打开默认路径、文件格式、窗体显示文本)

    C#的OpenFileDialog的常用属性设置 1.设置属性 1)设置弹出的指定路径(绝对路径.相等路径) 2)设置标题 3)设置文本格式 2.打开方式1(绝对路径) 2.1) 打开的路径

  8. [转]Jupyter默认目录和默认浏览器修改

    转摘于:https://blog.csdn.net/caterfreelyf/article/details/79774311 1.打开cmd,首先进入到Jupyter的安装目录,我的是在D:\Pyt ...

  9. Word打开默认显示缩略图,而不是文档结构图

    So easy! 1.打开Word文档,点击缩略图右侧的"X",关闭缩略图: 2.打开菜单[视图],勾选"文档结构图": 3.关闭当前Word文档: 4.再次打 ...

随机推荐

  1. js验证日期

    寻寻觅觅,Web开发里,对日期的验证太多了,网上好多是用正则表达式来验证,但是这种验证也只能验证格式,没办法验证有效性,比如平年(2月28天)和闰年(2月29天).平时用得多,以前经常用一次写一次,腻 ...

  2. javascript事件委托,事件代理,元素绑定多个事件之练习篇

    <ul id="parent-list"> <li id="post-1">item1</li> <li id=&qu ...

  3. 如何将excel文件中的数百万条数据在1分钟内导入数据库?

    在MYSQL里面,使用load data infile 命令就可以了. 步骤很简单 1.先将excel另存为csv格式的文本,csv是以逗号分隔各个字段数据的 2.在mysql中输入sql语句 loa ...

  4. 使用RNSwipeViewController类库进行视图切换

    如今很多应用已经不再局限于点击按钮触发事件来进行视图之间切换,为迎合给予用户更好体验,体现iOS系统极佳用户体验,使用手势来进行各个视图之间切换,用户至于一个大拇指在屏幕中央就可浏览到很多信息: 关于 ...

  5. Delphi图像处理 -- 最小值

    阅读提示:     <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM.     <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...

  6. poj1189 简单dp

    http://poj.org/problem?id=1189 Description 有一个三角形木板,竖直立放.上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每颗钉子和周 ...

  7. Android - 隐藏最顶端的通知条(Top Notification Bar)

    隐藏最顶端的通知条(Top Notification Bar/ActionBar) 本文地址: http://blog.csdn.net/caroline_wendy Android中, 视频播放等功 ...

  8. android自定义实现抽屉SlidingDrawer的功能

    最近项目中需要实现上拉功能,首先想到的就是Android本身自带的抽屉SlidingDrawer,最后也实现了不过,出现的问题就是设置背景色问题,handler和content是两个不同的部分,这就造 ...

  9. 《c陷阱与缺陷》笔记--注意边界值

    如果要自己实现一个获取绝对值的函数,应该都没有问题,我这边也自己写了一个: void myabs(int i){ if(i>=0){ printf("%d\n",i); }e ...

  10. 初步掌握Yarn的架构及原理(转)

    1.YARN 是什么? 从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性, ...