Java学习笔记:fileUpload文件上传

本文介绍了Apache Commons FileUpload组件,用于处理HTTP请求中的文件上传。讲解了其工作原理,包括DiskFileItemFactory和ServletFileUpload的核心API,并提供了实现文件上传的步骤,涉及JSP和Servlet的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是fileUpload?
fileUpload是apache的commons组件提供的上传组件,它最主要的工作就是帮我们解析request.getInpustream()。可以参考在线API文档:http://tool.oschina.net/apidocs/apidoc?api=commons-fileupload

二、fileupload组件工作原理
在这里插入图片描述

三、fileupload核心API

  1. DiskFileItemFactory
    构造器
  1. DiskFileItemFactory() // 使用默认配置
  2. DiskFileItemFactory(int sizeThreshold, File repository)
      sizeThreshold 内存缓冲区, 不能设置太大, 否则会导致JVM崩溃
      repository 临时文件目录
  1. ServletFileUpload
  1. isMutipartContent(request) // 判断上传表单是否为multipart/form-data类型 true/false
  2. parseRequest(request) // 解析request, 返回值为List类型
  3. isFormField() //是否是普通文件
  4. setFileSizeMax(long) // 上传文件单个最大值 fileupload内部通过抛出异常的形式处理, 处理文件大小超出限制, 可以通过捕获这个异常, 提示给用户
  5. setSizeMax(long) // 上传文件总量最大值
  6. setHeaderEncoding(String) // 设置编码格式

四、实现过程
1.导入jar包
在这里插入图片描述
2.编写jsp
在这里插入图片描述
3.编写servlet
//创建业务层对象
NewsService newsService = new NewsService();
InputStream in = null;
OutputStream out = null;
int id = 0;//页面传来的id值
//创建解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//获取解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 上传表单是否为multipart/form-data类型
if(!upload.isMultipartContent(request)) {
return ;
}
//解析request的输入流
try {
List parseRequest = upload.parseRequest(request);
//迭代list
for(FileItem f:parseRequest) {
if(f.isFormField()) {
//普通字段
id = Integer.parseInt(f.getFieldName());
String value = f.getString();
System.out.println(“name”+"="+value);
}else {
//上传文件
//获取上传文件名
String name = f.getName();
System.out.println(“文件名”+name);
name = name.substring(name.lastIndexOf("\")+1);
System.out.println(name);
//获取输入流
in = f.getInputStream();
//获取上传文件路径
String savePath = “D:\workspacedt91\FileUpLoadTestDemo\WebContent\images\”+name;
//上传文件名若不存在, 则先创建
File path = new File(savePath);
if(!path.exists()) {
path.getParentFile().mkdir();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值