java文件上传组件
1.文件上传组件FileUpload
1)java提供了文件上传的工具包
需要引入:commons-fileupload-1.2.1.jar(文件上床组件核心包)
commons-oi-1.4(封装了对文件处理相关工具类)
2)核心api:
ServletFileUpload文件核心工具类;
FileItemFactory->DisFileItemFactory文件上传工厂类
3)文件上传步骤:
1.jsp页面:
这里要注意:form中encType:multipart/form-data:表示的是表单表单上传
input type="file"满足两个条件就能上传文件了
三个值:application/x-www-form-urlencoded,multipart/form-data,text/plain
三个值区别:application/x-www-form-urlencoded 模式方式
multipart/form-data 文件模式
text/plain
2.Servlet上传类的书写:
1)创建文件上传核心工具类ServletFileupload->创建FileItemFactory,DisFileItemFactory文件上传工厂-》设置核心类
setFileSizeMax(30*1024*1024);setFileSizeMax(30*1024*1024);setHeaderEncoding("UTF-8");
3)将request的上传的参数变为FileItem类型的List集合,之后针对FileItem做处理
3.例子:
// 1. 创建工厂对象
FileItemFactory factory = new DiskFileItemFactory();
// 2. 文件上传核心工具类
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置大小限制参数
upload.setFileSizeMax(10*1024*1024); // 单个文件大小限制
upload.setSizeMax(50*1024*1024); // 总文件大小限制
upload.setHeaderEncoding("UTF-8"); // 对中文文件编码处理
// 判断
if (upload.isMultipartContent(request)) {
// 3. 把请求数据转换为list集合
List<FileItem> list = upload.parseRequest(request);
// 遍历
for (FileItem item : list){
// 判断:普通文本数据
if (item.isFormField()){
// 获取名称
String name = item.getFieldName();
// 获取值
String value = item.getString();
System.out.println(value);
}
// 文件表单项
else {
/******** 文件上传 ***********/
// a. 获取文件名称
String name = item.getName();
// ----处理上传文件名重名问题----
// a1. 先得到唯一标记
String id = UUID.randomUUID().toString();
// a2. 拼接文件名
name = id + "#" + name;
// b. 得到上传目录
String basePath = getServletContext().getRealPath("/upload");
// c. 创建要上传的文件对象
File file = new File(basePath,name);
// d. 上传
item.write(file);
//item.delete(); // 删除组件运行时产生的临时文件
System.out.println("文件上传成功");
System.out.println(basePath);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
参考文章:http://blog.ncmem.com/wordpress/2023/09/11/java%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e7%bb%84%e4%bb%b6/
欢迎入群一起讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2020-09-11 帝国CMS实现word图片自动转存
2020-09-11 dedecms实现word图片自动转存
2020-09-11 eWebEditor实现word图片自动转存
2020-09-11 wangEditor实现word图片自动转存
2020-09-11 xhEditor实现word图片自动转存
2020-09-11 TinyMCE实现word图片自动转存
2020-09-11 FCKEditor实现word图片自动转存