工具包
Apache-fileupload.jar – 文件上传核心包。
Apache-commons-io.jar – 这个包是fileupload的依赖包。同时又是一个工具包。
代码
/*获取tomcat的work目录,作为上传时存放的临时路径(超过最大值时才存放)*/ File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir"); /** * DiskFileItemFactory构造的两个参数 * 第一个参数:sizeThreadHold - 设置缓存(内存)保存多少字节数据,默认为10240字节,即10K * 如果一个文件没有大于10K,则直接使用内存直接保存成文件就可以了。 * 如果一个文件大于10K,就需要将文件先保存到临时目录中去。 * 第二个参数 File 是指临时目录位置 - 可以不用tomcat的work目录可以用任意一个目录 */ DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repository); servletFileUpload = new ServletFileUpload(fileItemFactory); int uploadLimit = ConfigHelper.getAppUploadLimit(); //获取文件上传限制默认为10(M) if (uploadLimit != 0){ servletFileUpload.setFileSizeMax(uploadLimit*1024*1024); //设置单文件最大大小为10M } /*解析request*/ Map<String,List<FileItem>> fileItemListMap = servletFileUpload.parseParameterMap(request); //将request转换为Map if (CollectionUtil.isNotEmpty(fileItemListMap)){ for (Map.Entry<String,List<FileItem>> fileItemListEntry : fileItemListMap.entrySet()){ String fieldName = fileItemListEntry.getKey(); //获取表单字段名 List<FileItem> fileItemList = fileItemListEntry.getValue(); if (CollectionUtil.isNotEmpty(fileItemListMap)){ for (FileItem fileItem:fileItemList){ if (fileItem.isFormField()){ //如果是表单字段 }else{ //如果是文件 String fileName = FileUtil.getRealFileName(new String(fileItem.getName().getBytes(),"UTF-8")); //获取文件名 if (StringUtil.isNotEmpty(fileName)){ //如果文件名不为空 long fileSize = fileItem.getSize(); //获取文件大小 String contentType = fileItem.getContentType(); //获取文件类型 InputStream inputStream = fileItem.getInputStream(); //获取文件输入流 fileParamList.add(new FileParam(fieldName,fileName,fileSize,contentType,inputStream)); //实例化一个文件参数并加到文件参数集合中去 } } } } } }