web--3.文件下载
来源:互联网 发布:淘宝放心淘是正品吗 编辑:程序博客网 时间:2024/06/11 12:11
1 文件下载的方式:
1.超连接下载
2.服务器端通过流下载(服务器端编程)
2 超链接下载
注意:如果文件可以直接被浏览器解析,那么会在浏览器中直接打开,不能被浏览器直接解析,就是下载操作。直接打开的要想下载,右键另存为。
超连接下载,要求下载 的资源,必须是可以直接被浏览器直接访问的。
客户端访问服务器静态资源文件时,静态资源文件是通过 缺省Servlet返回的,
在tomcat配置文件conf/web.xml找到 --- org.apache.catalina.servlets.DefaultServlet
3 在服务器端编程完成下载.
3.1 创建download2.jsp
3.2 创建DownloadServlet
//1.得到要下载 的文件名称
Stringfilename = request.getParameter("filename");
//2.判断文件是否存在
Filefile = new File("d:/upload/" + filename);
if(file.exists())
//3.进行下载
原理:就是通过response获取一个输出流,将要下载的文件内容写回到浏览器端就可以了.
注意:要想通过编程的方式,实现文件下载,
1.要设置mimetype类型
resposne.setContextType(StringmimeType);
问题:怎样可以得到要下载文件的mimeType类型?
ServletContext.getMimeType(Stringfilename);
如果设置了mimeType,浏览器能解析的就直接展示了,不能解析的,直接下载.
2.设置一个响应头,设置后的效果,就是无论返回的是否可以被浏览器解析,就是下载。
response.setHeader("content-disposition","attachment;filename=下载文件名称");
总结:服务器端编程下载:
1.将下载的文件通过resposne.getOutputStream()流写回到浏览器端。
2.设置mimeType
response.setContentType(getServletContext.getMimeType(Stringfilename));
3.设置响应头,目的是永远是下载操作
response.setHeader("content-disposition","attachment;filename=下载文件名称");
--------------------------------------
3.3 文件下载时的乱码问题:
3.3.1 关于下载时中文名称资源查找不到
原因:
<ahref='${pageContext.request.contextPath}/download?filename=天空.mp3'>天空.mp3</a>
这是get请求。
在服务器端:
String filename =request.getParameter("filename");
解决: newString(filename.getBytes("iso8859-1"),"utf-8");
3.3.2 下载文件显示时的中文乱码问题
response.setHeader("content-disposition","attachment;filename="+filename);
IE:要求filename必须是utf-8码
firefox:要求filename必须是base64编码.
问题:怎样判断浏览器?
Stringagent=request.getHeader("user-agent");
if(agent.contains("MSIE")) {
//IE浏览器
filename= URLEncoder.encode(filename, "utf-8");
}else if (agent.contains("Firefox")) {
//火狐浏览器
BASE64Encoderbase64Encoder = new BASE64Encoder();
filename= "=?utf-8?B?"
+base64Encoder.encode(filename.getBytes("utf-8"))
+"?=";
}else{
//其它浏览器
filename= URLEncoder.encode(filename, "utf-8");
}
public class FileDownUtils {//适应各种浏览器public static String adaptiveBrowser(HttpServletRequest request, String filename)throws UnsupportedEncodingException {String agent = request.getHeader("user-agent");if (agent.contains("MSIE")) {// IE浏览器filename = URLEncoder.encode(filename, "utf-8");} else if (agent.contains("Firefox")) {// 火狐浏览器BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?"+ base64Encoder.encode(filename.getBytes("utf-8"))+ "?=";} else {// 其它浏览器filename = URLEncoder.encode(filename, "utf-8");}return filename;}public static void foreverDown(HttpServletResponse response, String filename) {// 下载注意事项2--永远是下载response.setHeader("content-disposition", "attachment;filename="+ filename);}public static void downFile(HttpServletResponse response, File file)throws FileNotFoundException, IOException {FileInputStream fis = new FileInputStream(file); // 读取要下载文件的内容OutputStream os = response.getOutputStream(); // 将要下载的文件内容通过输出流写回到浏览器端.int len = -1;byte[] b = new byte[1024 * 100];while ((len = fis.read(b)) != -1) {os.write(b, 0, len);os.flush();}os.close();fis.close();}}
源代码文件:http://download.csdn.net/detail/qq_26553781/9848201
- web--3.文件下载
- Web文件下载
- WEB下载小文件
- WEB文件下载
- WEB-下载文件
- Java web 文件下载
- WEB 文件下载
- Java web----文件下载
- Java WEB 文件下载
- java web文件下载
- Java Web文件下载
- web下载文件
- java web 文件下载
- web 下载文件
- java web-文件下载
- java web-文件下载
- web下载文件
- Java Web文件下载
- 一步步带你,如何网站架构
- unity富文本
- 第十三天:用集合方式创建一副扑克牌
- 剑指offer——把字符串转换成整数
- CentOS 6.3下Samba服务器的安装与配置
- web--3.文件下载
- sql server中新建和删除数据库
- 内存栅栏:软件高手的硬件观(二)
- sqoop1.99.7安装
- 在二叉查找树中插入节点
- Java 制作二维码
- node-sass安装问题
- javaweb路径问题
- 对摄像机远近平面的参数的新理解(Z-Finghting的解决方法)