javaweb文件上传下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
孤傲苍狼
只为成功找方法,不为失败找借口!
JavaWeb学习总结(五十)——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb 中的文件上传和下载功能的实现。
对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件。这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,struts 上传的功能就是基于这个实现的。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。
一、开发环境搭建
创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示:
二、实现文件上传
2.1、文件上传页面和消息提示页面
upload.jsp页面的代码如下:
1 <%@ page language="java" pageEncoding="UTF-8"%>
2
3
4
5
6
7
8
9
15
16
message.jsp的代码如下:
1 <%@ page language="java" pageEncoding="UTF-8"%>
2
3
4
5
6
7
8
9${message}
10
11
2.2、处理文件上传的Servlet
UploadHandleServlet的代码如下:
1package me.gacl.web.controller;
2
3import java.io.File;
4import java.io.FileOutputStream;
5import java.io.IOException;
6import java.io.InputStream;
7import java.util.List;
8import javax.servlet.ServletException;
9import javax.servlet.http.HttpServlet;
10import javax.servlet.http.HttpServletRequest;
11import javax.servlet.http.HttpServletResponse;
12import mons.fileupload.FileItem;
13import mons.fileupload.disk.DiskFileItemFactory;
14import mons.fileupload.servlet.ServletFileUpload;
15
16public class UploadHandleServlet extends HttpServlet {
17
18public void doGet(HttpServletRequest request, HttpServletResponse response)
19throws ServletException, IOException {
20//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
21String savePath =
this.getServletContext().getRealPath("/WEB-INF/upload");
22File file = new File(savePath);
23//判断上传文件的保存目录是否存在
24if (!file.exists() && !file.isDirectory()) {
25System.out.println(savePath+"目录不存在,需要创建");
26//创建目录
27file.mkdir();
28}
29//消息提示
30String message = "";
31try{
32//使用Apache文件上传组件处理文件上传步骤:
33//1、创建一个DiskFileItemFactory工厂
34DiskFileItemFactory factory = new DiskFileItemFactory();
35//2、创建一个文件上传解析器
36ServletFileUpload upload = new
ServletFileUpload(factory);
37//解决上传文件名的中文乱码
38upload.setHeaderEncoding("UTF-8");
39//3、判断提交上来的数据是否是上传表单的数据
40if(!ServletFileUpload.isMultipartContent(request)){
41//按照传统方式获取数据
42return;
43}
44//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List
45List
46for(FileItem item : list){
47//如果fileitem中封装的是普通输入项的数据
48if(item.isFormField()){
49String name = item.getFieldName();