servlet实现文件下载的步骤及说明详解
servlet实现文件下载所需步骤及说明,供大家参考,具体内容如下
参考文章:servlet实现文件下载功能
1.原理介绍:
web容器为servlet生成并且传递的httpservletresponse对象不仅可以返回html文本,而且可以返回任何主流的其他文件格式,例如,.doc、.pdf、.jar、.avi等内容格式的文件.这些类型内容在http协议中主要是体现在http响应消息中的消息头部的content-type字段以及响应有效负载中.
content-type是向浏览器指明有效负载区里的内容是某某类型的,例如:.jar类型的内容.
而有效负载中的内容就是目标文件的字节集合,也就是二进制内容格式,而不是具体的类似于html的文本格式内容.
因此,可以说servlet可以利用httpservletresponse对象返回任何想要返回的内容。
需要通过httpservletresponse的实例去设置http协议响应消息消息头部的一些属性,这个是通过response.addheader()或response.setheader()或response.setintheader()函数来完成的。
这三个方法均有两个参数:第一个参数是属性名,第二个参数是属性值。
2.所需步骤:
2.1 response.setheader("content-type","文件格式所对应的内容类型")
具体要根据国际标准的mime属性来制定,很多种格式的文件类型在mime都会有对应,
如果直接通过url来指定具体资源文件,则apache服务器会根据服务器上的资源文件类型生成相应的http相应消息的content-type类型,
但是如果不是直接通过url指定资源文件,而是指向一个servlet,则在servlet内部就需要通过代码显式来指定响应消息中的content-type类型,否则不同种类的浏览器会有不同的动作,也很有可能使浏览器崩溃。
2.2 response.setheader("content-disposition","attachment;filename=" + 文件名称)
指定文件保存的默认命名,上例指定为utils.jar,是通过"content-disposition"属性指定的,如果不指定则浏览器会默认指定为当前servlet的url名称,例如codeservlet.do,也就是说扩展名变成了.do而不是.jar.
2.3 获取文件,并读取文件
2.4 以字节流的方式返回页面
实例:
/** * 处理文件下载的post * @throws ioexception */ protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { // 1.获得请求文件名 string filename = request.getparameter("filename"); // 2.设置文件mime类型(指定要返回内容的类型) response.setcontenttype(getservletcontext().getmimetype(filename)); // 3.设置content-disposition(指定下载该文件时的文件名) response.setheader("content-disposition", "attachment;filename=" + filename); // 4.读取目标文件,通过response将目标文件写到客户端 // 4.1 获取目标文件的绝对路径 string filepath = "web-inf/uploadfiles/" + filename; filepath = this.getservletcontext().getrealpath(filepath); // 4.2 读取文件 inputstream in = new fileinputstream(filepath); // 4.3 输出文件 outputstream out = response.getoutputstream(); // 写文件 int n; while ((n = in.read()) != -1) { out.write(n); } in.close(); out.close(); }
说明:
1.所需jar包,版本不限
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
2.导包时不要导错了
import java.io.fileinputstream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse;
3.更多对于文件的操作,请移步文章:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。