首页 > 编程知识 正文

java实现文件下载的两种方式(java通过url下载文件)

时间:2023-05-04 02:21:32 阅读:79851 作者:653

作者:乐字节-坑如意之舞香蕉篮球/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.cn

multipart/plain

主流浏览器以不同的方式对该编码进行编码。

Google Chrome以与application / x-www-form-urlencoded方案相同的方式对数据进行编码,而Firefox对数据进行编码的方式如下:

fave=xml name=www.lezijie.cn

每个数据项都放在一行上,不会对特殊字符进行编码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。