JSP FileUpload实现文件上传

本文详细介绍了文件上传的基本条件,包括表单提交方式、文件上传项的设置及enctype属性的配置。阐述了如何使用fileuploadjar包的Commons-FileUpload组件进行文件上传的基本操作,从磁盘文件项工厂的创建到核心解析类的使用,再到解析request请求并获取上传文件,最后通过自定义工具类生成唯一文件名,确保文件上传的安全性和效率。

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

文件上传的条件
  • 表单必须是post提交方式
  • 表单中必须有文件上传项,文件上传项必须有name属性和值
  • 表单的enctype属性必须设置为multipart/form-data
文件上传基本操作

数据接收:通过使用fileupload jar包的Commo-FileUpload组件完成文件上传
基本步骤:

  1. 创建一个 磁盘文件项工厂 的对象
    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
  2. 创建一个核心解析类
    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory );
  3. 解析request请求 —— parseRequest,返回一个List集合,List集合中存放的是FileItem对象(每一个表单项都是一个FileItem对象)
    List<FileItem> list = servletFileUpload.parseRequest(request);
  4. 遍历集合,获得每个FileItem,判断是表单项还是文件上传项
    fileItem.isFormField(): 返回是普通的文件表单项还是文件上传项
    fileItem.getFieldName(): 获得表单项的name属性值
    fileItem.getString(“UTF-8”): 获取表单的文本值,可设置UTF-8解决中文乱码
  5. 获得文件名:
    String filename = fileItem.getName();
  6. 通过自定义工具类获得唯一文件名:
    String uuidfilename = UploadUtils.getUUIDFileName(filename);注:UploadUtils类是自定义工具类,具体实现是:
public class UploadUtils {
	/*
	 * 生成唯一文件名
	 * */
	public static String getUUIDFileName(String fileName) {
		int idx = fileName.lastIndexOf(".");
		String extention = fileName.substring(idx);//扩展名
		String uuidFileName = UUID.randomUUID().toString().replace("-", "")+extention;
		
		return uuidFileName;
	} 
	public static void main(String[] args) {
		System.out.println(getUUIDFileName("1.jpg"));
	}
}
  1. 输入流获得文件上传的数据:
    InputStream is = fileItem.getInputStream();
  2. 得到文件要上传的路径
    url = this.getServletContext().getRealPath("/upload")+"//"+uuidfilename;
  3. 输入流对接输出流
OutputStream os = new FileOutStream(url);//输出流目标为url
int len = 0;
byte[] b = new byte[1024];
while((len=is.read(b)) != -1){//读取输入流到b中
os.write(b,0,len);//将b写入输出流中
}
is.close();//关闭输入流
os.close();//关闭输出流
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值