title: 实现在网页上下载文件
date: 2015-12-28 20:34:19
categories: UtilsClass_Resource
tags: Utils


xl_echo编辑整理,欢迎转载,转载请声明文章来源。更多案例、资料请联系QQ:1280023003

实现在网页上下载文件

方式一:

超链接直接将文件的路径写到超链接的href中,只要浏览器不支持打开该文件,就会下载

方式二:

编写代码的方式完成文件的下载

设置两个头和一个流:

Content-Type:文件的MIME的类型
Content-Disposition:以下载的形式打开文件
InputStream:文件的输入流

解决中文乱码问题

解决从浏览器输入乱码问题:String filename = new String(request.getParameter(“filename”).getBytes(“ISO-8859-1”),”UTF-8”);
解决向浏览器输出乱码问题:1、先了解用户使用的是什么浏览器:String agent = request.getHeader(“User-Agent”);
if(agent.contains(“Firefox”)){
filename = base64EncodeFileName(filename);
}else{//如果不是火狐
filename = URLEncoder.encode(filename,”UTF-8”);
}
再设置输出头部分response.setHeader("Content-Disposition", "attachment;filename="+filename);

实现代码

javaServlet部分

package user_servlet;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import sun.misc.BASE64Encoder;public class User_Download_Servlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//文件下载,获取用户点击的文件名String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");//设置Content-TypeString type = this.getServletContext().getMimeType(filename);//获取需要下载文件的类型,用来设置响应头的信息response.setHeader("Content-Type", type);//获取全路径名,用于流读取文件String RealPath = this.getServletContext().getRealPath("/Download/"+filename);//处理浏览器的乱码为题//查看用户使用的是什么浏览器String agent = request.getHeader("User-Agent");if(agent.contains("Firefox")){filename = base64EncodeFileName(filename);}else{//如果不是火狐filename = URLEncoder.encode(filename,"UTF-8");}//设置Content-Dispositionresponse.setHeader("Content-Disposition", "attachment;filename="+filename);//获取一个字节输入流InputStream is = new FileInputStream(RealPath);//获取输出流ServletOutputStream outputStream = response.getOutputStream();//向用户传送数据int len = 0;byte[] b = new byte[1024];while((len = is.read(b)) != -1){outputStream.write(b,0,len);}is.close();}//解决火狐浏览器的乱码问题专属代码public static String base64EncodeFileName(String fileName) {BASE64Encoder base64Encoder = new BASE64Encoder();try {return "=?UTF-8?B?"+ new String(base64Encoder.encode(fileName.getBytes("UTF-8"))) + "?=";} catch (UnsupportedEncodingException e) {e.printStackTrace();throw new RuntimeException(e);}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

HTML部分

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h1>超链接下载方式</h1><a href="/shopping/Download/[牛人]TF家族 王俊凯王源 洋葱 超清.mp4">文本文件</a><a href="/shopping/Download/博客登录文件.txt">图片文件</a><a href="/shopping/Download/鉴赏 (7).jpg">压缩包文件</a><a href="/shopping/Download/hexo-theme-tranquilpeak-master.zip">视频文件</a><h1>手动编码方式下载</h1><a href="/shopping/User_Download_Servlet?filename=aaa.mp4">aaa.mp4</a><a href="/shopping/User_Download_Servlet?filename=hexo-theme-tranquilpeak-master.zip">hexo-theme-tranquilpeak-master.zip</a><a href="/shopping/User_Download_Servlet?filename=鉴赏 (7).jpg">鉴赏 (7).jpg</a><a href="/shopping/User_Download_Servlet?filename=博客登录文件.txt">博客登录文件.txt</a></body>
</html>

实现在网页上下载文件相关推荐

  1. 如何极速下载网页上的文件? 怎么批量下载文献

    如何快速下载网页上的文件?当今许多文件会被传输至网盘等云空间中,但有些文件仍可以通过网页下载,使用IDM我们可以快速下载不同类型的网页文件.怎么批量下载文献?在写论文时,常需要引用某些文献来支持自己的 ...

  2. python3 下载特定网页上的文件

    python3 下载特定网页上的文件 参考:https://blog.csdn.net/csdn86868686888/article/details/82108146 https://www.cnb ...

  3. [奇怪的小知识]从网页上下载内嵌的PDF、PPT文件(以Google浏览器为例)

    [奇怪的小知识]从网页上下载内嵌的PDF.PPT文件(以Google浏览器为例) 1. 打开谷歌浏览器开发者工具 实操网址 2. 选中Network->Fetch/XHR 3. 刷新网页 刷新网 ...

  4. Linux中7个用来浏览网页和下载文件的命令

    上一篇文章中,我们提到了rTorrent.wget.cURL.w3m.Elinks等几个有用的工具,很多人回信说还有其它几个类似的工具也值得讨论,所以就有了这篇文章.如果错过了第一部分的讨论,可以通过 ...

  5. 手机端php mime设置,php,_如何使用MIME协议配合表单在iphone手机上下载文件?,php - phpStudy...

    如何使用MIME协议配合表单在iphone手机上下载文件? 做了一个在线下载音乐网站的工具,使用PHP编写,包含MIME协议中的Content-type&Content-Disposition ...

  6. 从github上下载文件,文件夹,整个项目

    一.下载文件 1.点进文件,如下图,然后右键红框 2.选择'将链接另存为',会出现以下界面 3.然后下载就可以.如果你成功了,恭喜你!但是我失败了... 不晓得是我电脑的原因还是别的什么,尝试好多次都 ...

  7. 【python】打开网页和下载文件

    大家好,我是胡亥大魔王.今天介绍python中打开网页和下载文件 用webbrowser打开网页 webbrowser 是python自带的,打开浏览器获取指定网页 import webbrowser ...

  8. 从给定网页上下载img src= /格式的图片,并保存到制指定路径

    从给定网页上下载<img src="" />格式的图片,并保存到制指定路径,适用于小批量的下载图片,大批量的建议还是用爬虫比较好. 作者的思路是:把整个HTML页面都存 ...

  9. 从百度网页上下载歌曲,歌曲名称显示乱码

    [DESCRIPTION] 从百度网页上下载歌曲,歌曲名称显示乱码 [SOLUTION] 该问题属于Baidu server返回的Content Disposition中使用GB2312的编码 但并没 ...

最新文章

  1. css 联系我们,CSS3 模态窗口联系我们表单模板
  2. 自编码之残差和磁力线网络结构
  3. 微信小程序外卖增长402%,茶饮下单最活跃
  4. 双指针算法之滑动窗口 | 力扣76.最小覆盖字串
  5. boost::spirit::karma::real_generator相关的测试程序
  6. org.apache.hadoop.hbase.ClockOutOfSyncException
  7. Mysql--重点1
  8. Linux信号的产生和处理
  9. 0. PSR-0 --- 自动加载
  10. 西瓜书重温(二): 模型评估与选择
  11. Qt 基于Google引擎的拼音输入法
  12. npm install Error: EACCES: permission denied 问题解决
  13. 字节跳动 8 年,抖音、头条的技术能力开发者都可以用起来了!
  14. html创建站点文件夹,构建及访问Web站点
  15. bitcoin全节点搭建
  16. 太爽了!35岁程序员被裁后反而实现财富自由!
  17. K-means聚类以及利用K-means来压缩图像
  18. Java实现凑硬币或者最少硬币数
  19. 施工部署主要不包括_施工部署包括哪些?
  20. 10. Kubernetes的日志与监控

热门文章

  1. QT大作业之---学生信息管理系统
  2. 【显示器】入门参数讲解
  3. scratch——画板
  4. PHP下载APK文件
  5. Tomcat8+JDK8安装与配置
  6. 产品经理如何来优化CSDN手机短信验证的功能
  7. 关于python的基础语法
  8. 混沌精英哈里斯鹰优化算法-附代码
  9. 【计算几何】求三角面和直线交点
  10. 时间序列数据分析与预测之Python工具汇总