2019-06-11

文件上传下载

在做文件上传的时候,会有一个上传文件的界面,首先我们需要一个表单,

并且表单的请求方式为 POST;其次我们的 form 表单的 enctype 必须设

为”multipart/form-data”即 enctype="multipart/form-data"意思是设置表单的

MIME 编码。默认情况下这个编码格式是”application/x-www-form-urlencoded”,

不能用于文件上传;只有使用了 multipart/form-data 才能完整地传递文件数据。


后台 commons-fileupload的使用

首先需要导入第三方 jar 包,http://commons.apache.org/ 下载

commons-io 和 commons-fileupload 两个 jar 的资源。解压并导入到项目中。

commons-fileupload.jar是文件上传的核心包 commons-io.jar 是 filefupload 的

依赖包,同时又是一个工具包。


DiskFileItemFactory–设置磁盘空间,保存临时文件。只是一个工具类

ServletFileUpload–文件上传的核心类,此类接收 request,并解析

ServletFileUpload.parseRequest(request);– List 解析 request

1、创建一个DiskFileItemFactory 工厂类,并制定临时文件和大小

2、创建ServletFileUpload 核心类,接收临时文件,做请求的转换

3、通过ServletFileUpload 类转换原始请求,得到 FileItem 集合

4、遍历集合中的各个元素并处理

5、判断每个元素是否是普通表单项,如果是则按照普通表单项处理

6、如果不是普通表单项,则是文件,通过处理的方式进行处理(上传)


超链接下载

当我们在 HTML 或 JSP 页面中使用标签时,原意是希望能够进行跳转,但

当超链接遇到浏览器不识别的动态网页时则会自动下载。例如超链接下载但当遇

见浏览器能够直接显示的资源,浏览器就会默认显示出来,比如 txt,png,jpg 等。

当然我们也可以通过 download 属性规定浏览器进行下载。但有些浏览器并不支

持。

默认下载

超链接下载

指定download属性下载

超链接下载

这里,download 也可以不写任何信息,会自动使用默认文件名。这样当用

户打开浏览 器点击链接的时候就会直接下载文件。


后台实现下载

Step1:需要通过 HttpServletResponse.setContentType 方法设置 Content-type

头字段的值,为浏览器无法使用某种方式或激活某个程序来处理的 MIME 类型,

例如”application/octet-stream”或”application/x-msdownload”等

Step2:需要通过 HttpServletResponse.setHeader 方法设置

Content-Disposition头的值为”attachment;filename=文件名”

Step3: 读取下载文件,调用 HttpServletResponse.getOutputStream 方法返回

的 OutputStream 对象来向客户端写入附件内容。





public class

DownloadServlet extends HttpServlet {

private static

final long serialVersionUID = 1L;

protected void

service(HttpServletRequest req, HttpServletResponse resp)

throws

ServletException, IOException {

req.setCharacterEncoding("UTF-8");

// 获取文件下载路径

String path =

getServletContext().getRealPath("/") + "download/";

String fileName

= req.getParameter("filename");

File file = new

File(path + fileName);

if (file.exists())

{

// 设置相应类型 application/octet-stream

resp.setContentType("application/x-msdownload");

// 设置头信息

resp.setHeader("Content-Disposition",

"attachment;filename=" +

fileName);

InputStream is =

new FileInputStream(file);

ServletOutputStream

os = resp.getOutputStream();

byte[] car = new

byte[1024];

int len = 0;

while ((len =

is.read(car)) != -1) {

os.write(car, 0,

len);

}

// 关闭流、释放资源

os.close();

is.close();

} else {

System.out.println("文件不存在,下载失败!");

}

}

}

你可能感兴趣的:(2019-06-11)