文件上传功能

一、文件上传

可以使用commons中的FileUpload组件,这个包还依赖于commons-io组件

准备条件:ENCTYPE=“multipart/form-data” 必须为post请求,并且为type=“file”

后端需要使用FileUpload来进行文件解析

1、创建一个文件项工厂对象 DiskFileItemFactory
2、创建ServletFileUpload,并传入工厂对象
3、解析请求,将请求中传输的文件项内容解析出来
4、然后使用isFormFiled方法判断是普通数据还是文件数据

FileItemFactory fis = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fis);
//解析请求,将请求中传输的文件项内容解析出来
List<FileItem> fileItemList = upload.parseRequest(request)
for(FileItem fileItem : fileItemList){
	// 普通表单返回的是true,文件项返回false
	if(fileItem.isFormField()){
		//获取表单中的字段名
		String name = fileItem.getFiledName();
		//获取表单中的属性值, 并传入UTF-8 解决乱码问题
		String value = fileItem.getString("UTF-8");
	} else{
		//获取文件名
		String fileName = fileItem.getName();
		//获取文件大小
		long size = fileItem.getSize();
		//存储文件
		fileItem.write(new File("d:/"+fileName));
	}

这里会再次遇到乱码问题,由于之前普通表单中获取数据的方式(如下代码)已经不生效了,因此针对于普通表单中乱码问题的解决 也不能用在这里。需要使用getString的重载方法getString(编码)来解决乱码

request.setCharacterEncoding("UTF-0");
String upfile = request.getParameter("upfile");
String note = request.getParameter("note");

二、文件格式限制

判断是否我们支持的上传文件格式

//获取到文件扩展名
String extension = FilenameUtils.getExtension(fileName);
List<String> supportList = Arrays.asList("jps","png");
if(supportList.contains(extension)){
	//如果符合我们支持的上传文件格式,在进行存储等一系列操作	
}else{
	out.write("文件格式非法")
}

三、isMultipartContent

为了防止不是通过提交表单的方式进行文件的处理,比如我们将上传文件的表单提交到doAdd.jsp页面进行处理文件上传的操作,但是现在不通过提交表单,直接请求doAdd.jsp页面怎么办,因此可以通过使用isMultipartContent这个方法

FileItemFactory fis = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fis);
if(upload.isMultipartContent(request)){

	List<FileItem> fileItemList = upload.parseRequest(request)
	for(FileItem fileItem : fileItemList){
	// 普通表单返回的是true,文件项返回false
	if(fileItem.isFormField()){
		//获取表单中的字段名
		String name = fileItem.getFiledName();
		//获取表单中的属性值, 并传入UTF-8 解决乱码问题
		String value = fileItem.getString("UTF-8");
	} else{
		//获取文件名
		String fileName = fileItem.getName();
		//获取文件大小
		long size = fileItem.getSize();
		//存储文件
		fileItem.write(new File("d:/"+fileName));
	}
}else{
	out.write("非法上传")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值