组件使用:
1,下载组件,引入jar
commons-fileupload-1.2.1.jar
commous-io-1.4.jar
2,配置xml
3,Api学习
前台:
1. 提交方式:post
2. 表单中有文件上传的表单项: <input type=”file” />
3. 指定表单类型:
默认类型:enctype="application/x-www-form-urlencoded"
文件上传类型:multipart/form-data
<form action="${pageContext.request.contextPath }/FileUpload" method="post" enctype="multipart/form-data">
文件 <input type="file" name="file1"><br/>
public void upload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.创建文件上传工厂类
DiskFileItemFactory fac = new DiskFileItemFactory();
//2.创建文件上传核心类对象
ServletFileUpload upload = new ServletFileUpload(fac);
//设置单个文件最大为30m
upload.setFileSizeMax(30*1024*1024);
//设置总文件最大60M
upload.setSizeMax(60*1024*1024);
//3.判断表单是否为文件上传表单
if(upload.isMultipartContent(request)){
//把请求转换成FileItem
try {
List<FileItem> items = upload.parseRequest(request);
//遍历items
for(FileItem item : items){
//判断普通填表元素还是文件元素
if(item.isFormField()){
//获取元素名称
String filedName = item.getFieldName();
//获取值
String value = item.getString("UTF-8");
System.out.println(filedName+":"+value);
}else{
// 处理文件上传
//获取文件名
String name = item.getName();
name=new String(name.getBytes(),"utf-8");
// ----处理上传文件名重名问题----
// a1. 先得到唯一标记
String id = UUID.randomUUID().toString();
// a2. 拼接文件名
name = id + "#" + name;
//获取上传文件目录
String basePath = getServletContext().getRealPath("/upload");
//创建文件对象
File file = new File(basePath,name);
try {
item.write(file);
item.delete(); // 删除组件运行时产生的临时文件
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}else{
System.out.println("不处理");
}
}
private void down(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
//获取用户下载文件的名字
String fileName = request.getParameter("fileName");
//将名字转换到utf-8
fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
// 先获取上传目录路径
String basePath = getServletContext().getRealPath("/upload");
// 获取一个文件流
InputStream in = new FileInputStream(new File(basePath,fileName));
// 如果文件名是中文,需要进行url编码
fileName = URLEncoder.encode(fileName, "UTF-8");
// 设置下载的响应头
response.setHeader("content-disposition", "attachment;fileName=" + fileName);
// 获取response字节流
OutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
int len = -1;
while ((len = in.read(b)) != -1){
out.write(b, 0, len);
}
// 关闭
out.close();
in.close();
}
Servlet文件上传与下载
最新推荐文章于 2022-08-28 09:16:03 发布