form表单多文件上传并且存到指定文件夹下

前端jsp,后台Java。具体步骤如下

1.jsp代码如下,主要设置两个属性,给form表单设置这个属性enctype="multipart/form-data";给input=file设置multiple="multiple"属性,多文件上传,如果不写这个属性,只能单个上传。

文件

样式是这样的:

form表单多文件上传并且存到指定文件夹下_第1张图片

2.后台处理代码:保存文件到指定路径下。

public IZrarResponse saveImportData(IZrarRequest req) throws Exception{
		IZrarResponse res = new ZrarResponse();
		String savePath = "D:\\";
		// 使用Apache文件上传组件处理文件上传步骤:
		// 1、创建一个DiskFileItemFactory工厂
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		// 2、创建一个文件上传解析器
		ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
		// 解决上传文件名的中文乱码
		fileUpload.setHeaderEncoding("UTF-8");
		// 3、判断提交上来的数据是否是上传表单的数据
		if (!fileUpload.isMultipartContent(req.getHttpServletRequest())) {
			// 按照传统方式获取数据
			return null;
		}
		// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List集合,每一个FileItem对应一个Form表单的输入项
		List fileItems = fileUpload.parseRequest(req.getHttpServletRequest());
		//赋值
		for (FileItem item : fileItems) {
			//附件表主键
			String md5Id = (new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString();
			// 如果fileitem中封装的是上传文件,得到上传的文件名称,
			String fileName = item.getName();
			System.out.println(fileName);
			if (fileName == null || fileName.trim().equals("")) {
				continue;
			}
			// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
			// c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
			// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
			fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
			// 获取item中的上传文件的输入流
			InputStream inputStream = item.getInputStream();
			//创建一个文件输出流
			FileOutputStream out = new FileOutputStream(savePath + "\\" + fileName);
			//创建一个缓冲区
			byte buffer[] = new byte[1024];
			//判断输入流中的数据是否已经读完的标识
			int len = 0;
			//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
			while((len=inputStream.read(buffer))>0){
				//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
				out.write(buffer, 0, len);
			}
			//关闭输入流
			inputStream.close();
			//关闭输出流
			out.close();
			//删除处理文件上传时生成的临时文件
			item.delete();
		}
		return res;
	}

完毕!!

3.如果form表单里面既有file类型,又有其他数据类型,可以这样写:

jsp:

testName
testPlace
文件

java:

public IZrarResponse saveImportData(IZrarRequest req) throws  Exception{
		IZrarResponse res = new ZrarResponse();
		String savePath = (new StringBuilder(String.valueOf(this.UPLOAD_DIR_LINUX)))+"";//+File.separator
		String newDate = DateUtil.dateToString(1, new Date());
//		savePath = "D:\\";
		// 使用Apache文件上传组件处理文件上传步骤:
		// 1、创建一个DiskFileItemFactory工厂
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		// 2、创建一个文件上传解析器
		ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
		// 解决上传文件名的中文乱码
		fileUpload.setHeaderEncoding("UTF-8");
		// 3、判断提交上来的数据是否是上传表单的数据
		if (!fileUpload.isMultipartContent(req.getHttpServletRequest())) {
			// 按照传统方式获取数据
			return null;
		}
		// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List集合,每一个FileItem对应一个Form表单的输入项
		List fileItems = fileUpload.parseRequest(req.getHttpServletRequest());
		//赋值
		for (FileItem item : fileItems) {
			// 如果fileitem中封装的是普通输入项的数据
			if (item.isFormField()) {
				String name = item.getFieldName();
				// 解决普通输入项的数据的中文乱码问题
				String value = item.getString("UTF-8");
				System.out.println(name + "  " + value);
				//jsp 页面的name属性
				if("place".equals(name)){
					System.out.println(value);
				}
				if("imgClassName".equals(name)){
					System.out.println(value);
				}
			}else {
				//附件表主键
				String md5Id = (new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString();
				// 如果fileitem中封装的是上传文件,得到上传的文件名称,
				String fileName = item.getName();
				System.out.println(fileName);
				if (fileName == null || fileName.trim().equals("")) {
					continue;
				}
				// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
				// c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
				// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
				fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
				// 获取item中的上传文件的输入流
				InputStream inputStream = item.getInputStream();
				String mobilePhone = fileName.substring(0,fileName.lastIndexOf("."));
				
				String sql = "UPDATE t_xt_yh set photo_src = '"+ savePath + "\\" + fileName +"' where usermobile = '"+mobilePhone+"' ";
				dao.update(sql);
				//创建一个文件输出流
				FileOutputStream out = new FileOutputStream(savePath + "\\" + fileName);
				//创建一个缓冲区
				byte buffer[] = new byte[1024];
				//判断输入流中的数据是否已经读完的标识
				int len = 0;
				//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
				while((len=inputStream.read(buffer))>0){
					//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
					out.write(buffer, 0, len);
				}
				//关闭输入流
				inputStream.close();
				//关闭输出流
				out.close();
				//删除处理文件上传时生成的临时文件
				item.delete();
			}
		}
		return res;
	}

 

你可能感兴趣的:(java)