作者:乐字节-坑如意之舞香蕉篮球/p
文件下载的方式
超链接下载后台实现下载
案例实操
超链接下载
在html或JSP页面中使用标签时,其初衷是可以跳转,但如果遇到浏览器无法识别的动态页面,则会自动下载。 当遇到浏览器可以直接显示的资源时,浏览器默认显示txt、png、jpg等。 当然,也可以通过download属性指定浏览器进行下载。 但是,有些浏览器不支持。默认下载
a href='upload/abc.zip '超链接的下载/a指定的下载属性
a href=' upload/ABC.txt ' download=' abcdef.txt '超链接的下载/a在此,download可以不写任何内容,而是自动使用默认文件名这样,当用户打开浏览器并单击链接时,文件将直接下载。
后台实现下载
步骤1:http servlet response.seense,以便浏览器可以通过某种方式(如“应用程序/操作”)或启动程序来处理适当的MIME类型的数据步骤2 :在http servlet response.setheader方法中,将Content-Disposition标头的值设置为“附件; filename=文件名”,filename提供下载文件时的默认文件名
步骤3 :读取下载文件,调用从http servlet response.get outputstream方法返回的output stream对象,将附件的内容写入客户端。
publicclassdownloadservletextendshttp servlet {
私有静态金融串行服务器id=1l;
protectedvoidservice (http服务器请求,http服务器响应) throws服务器响应,io执行
//设定请求代码
request.setcharacterencoding (utf-8 );
//接受参数,获得要下载的文件的名称
字符串文件名=request.getparameter ('文件名);
//判断名称是否为空
if (文件名==空值||' '.equals (文件名) )
//提示
System.out.println ('文件名不能为空);
返回;
}
//获取存储文件的真实路径
字符串路径=request.getservletcontext (.get realpath ('/'文件名);
//从文件路径和文件名中获取文件对象
文件文件=新文件(路径;
//判断是否存在,是标准的文件
if (文件.文件()文件. isfile ) ) ) ) ) )。
//设置适当类型的APP/octet-stream
response.set内容类型(应用程序
cation/x-msdownload"); // 设置头信息 response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 通过file对象得到输入流 FileInputStream in = new FileInputStream(file); // 得到输出流 ServletOutputStream out = response.getOutputStream(); byte[] car = new byte[1024]; int len = 0; while((len = in.read(car)) != -1){ out.write(car,0,len); } // 关闭流 in.close(); out.close(); } else { System.out.println("文件路径不正确!"); } } }扩展~HTML表单编码
HTML表单编码
enctype属性指定浏览器如何编码数据并将其呈现给服务器。
此属性有三个允许值。
application/x-www-form-urlencoded 默认编码。 此编码无法用于将文件上传到服务器。multipart/form-data 此编码用于将文件上传到服务器。text/plain 此编码因浏览器而异。要理解不同编码的工作原理,我们创建了以下形式。
<!DOCTYPE HTML> <html> <body> <form method="post" action="http://example.com/form"> <input name="fave" /> <input name="name" /> <button>Submit Vote</button> </form> </body> </html>application/x-www-form-urlencoded
如果使用application / x-www-form-urlencoded编码,每个数据项的名称和值都使用用于编码URL的相同方案进行编码。这是编码应用于示例形式的数据的方式:
fave=Apples&name=FiratName+LastName特殊字符将替换为其HTML实体对应部分。数据项的名称和值由等号(=)分隔,数据/值元组由&符号(&)分隔。
multipart/form-data
multipart / form-data编码往往仅用于上传文件。下面是示例表单中的数据如何编码:
------WebKitFormBoundary2desQWER543CDFGF Content-Disposition: form-data; name="fave" YourName ------WebKitFormBoundary2desQWER543CDFGF Content-Disposition: form-data; name="name" www.lezijie.cn ------WebKitFormBoundary2desQWER543CDFGF-- fave=Apple name=www.lezijie.cnmultipart/plain
主流浏览器以不同的方式对该编码进行编码。
Google Chrome以与application / x-www-form-urlencoded方案相同的方式对数据进行编码,而Firefox对数据进行编码的方式如下:
fave=xml name=www.lezijie.cn每个数据项都放在一行上,不会对特殊字符进行编码。