开发步骤:
前提:指定表单上传类型是文件上传表单 enctype="multipart/form-data"
提交方式是post
表单中存在文本域对象
通过FileUpload组件解析内容组件使用的步骤下载组件,
引入jar文件配置文件properties/xml学习API
需要的jar包:commons-fileupload-1.2.1.jar commons-io-1.4.jar jstl.jar standard.jar
共有三个页面:
用户页面:index.jsp(首页) upload.jsp(文件上传页面) downlist.jsp(文件下载页面)
---------------------------------用户页面:index.jsp(首页)-------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
首页
文件上传
文件下载
---------------------------------upload.jsp(文件上传页面)-------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
文件上传
---------------------------------downlist.jsp(文件下载页面)-------------------------
<%@ page language="java" import="java.util.*"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
下载页面
序号
文件名
操作
<%-- ${request.filenames }
<%=request.getAttribute("filenames") %> --%>
${vs.count }
${en.value }
<%--下载--%>
下载
-------------------------------------------------------------------------------------------------------后台代码:Upload2.jsp-------------------------------------------------------------------------
public class Upload2 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取请求参数,区分不同的操作类型
String method = req.getParameter("method");
if("upload".equals(method)){
//上传
upload(req,resp);
}
else if("downList".equals(method)){
//进入下载页面
downList(req,resp);
}
else if("down".equals(method)){
//下载
down(req,resp);
}
}
//3.处理下载
private void down(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException, IOException {
// TODO Auto-generated method stub
//获取用户下载的文件名称(url地址后追加数据,get)
String fileName= req.getParameter("fileName");
//转成UTF-8编码
fileName=new String(fileName.getBytes("ISO8859-1"),"UTF-8");
//先获取上传目录路径
String basePath = getServletContext().getRealPath("/upload");
//获取一个文件输入流
InputStream is = new FileInputStream(new File(basePath,fileName));
//如果文件名是中文,需要进行url编码
fileName = URLEncoder.encode(fileName,"UTF-8");
//设置下载的响应头
resp.setHeader("content-disposition", "attachment;fileName="+fileName);
//获取response字节流
OutputStream out = resp.getOutputStream();
byte[] b= new byte[1024];
int len =-1;
while((len=is.read(b))!=-1){
out.write(b,0,len);
}
//关闭流
out.close();
is.close();
}
//进入文件下载列表
private void downList(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//实现思路:先获取upload目录下所有文件的文件名,再保存,跳转到down.jsp列表展示
//1.初始化map集合,及所有的文件的文件名
Map fileNames = new HashMap<>();
//2.获取上传目录,及其下的所有文件名
String basePath = getServletContext().getRealPath("/upload");
//目录
File file = new File(basePath);
//目录下,所有的文件名
String[] list = file.list();
//遍历,封装
if(list!=null&&list.length>0){
for(int i=0;i list = upload.parseRequest(req);
for (FileItem item : list) {
// 判读:普通文本数据
if (item.isFormField()) {
// 普通数据
String fieldName = item.getFieldName(); // 表单元素名称
String content = item.getString(); // 表单元素名称,对应的数据
// item.getString("UTF-8");指定编码
System.out.println(fieldName + ":" + content);
} else {
/************* 文件上传 ***********/
// a.获取文件名称
String name = item.getName();
// --处理上传文件重名问题
// a1.先得到唯一标识
String id = UUID.randomUUID().toString();
// a2.拼接文件名
name = id + "#" + name;
// b.得到目标上传目录
String basePath = getServletContext().getRealPath("/upload");
System.out.println(basePath);
// c.创建要上传的文件对象
File file = new File(basePath, name);
// d.上传
item.write(file);
// item.delete();//删除组件运行时产生的临时文件
System.out.println("上传成功");
}
}
} else {
System.out.println("不做处理");
}
} catch (Exception e) {
}
}
}