直接上代码:
try{ //request获取的参数map Map<String , String> paramMap = new HashMap<String, String>(); HttpServletRequest request = this.getRequest(); DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); //临时存放目录 String tempPath = request.getServletContext().getRealPath("/upload"); List<String> tempFileSavePath = new ArrayList<String>();//临时文件存放的硬盘绝对目录列表(考虑到可能上传多个文件) List<FileItem> items = upload.parseRequest(request); for(FileItem item:items){ //如果fileitem中封装的是普通输入项的数据(输出名:值) if(item.isFormField()){ String filedName = item.getFieldName();//普通输入项数据的名 //解决普通输入项的数据的中文乱码问题 String filedValue = item.getString("UTF-8");//普通输入项的值 paramMap.put(filedName, filedValue); }else{ //如果fileitem中封装的是上传文件,得到上传的文件名称, String fileName = item.getName();//上传文件的名 //多个文件上传输入框有空的异常处理 if(fileName == null||"".equals(fileName.trim())){ //去空格是否为空 continue;// 为空,跳过当次循环, 第一个没输入则跳过可以继续输入第二个 } //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt //处理上传文件的文件名的路径,截取字符串只保留文件名部分。//截取留最后一个"\"之后,+1截取向右移一位("\a.txt"-->"a.txt") fileName = fileName.substring(fileName.lastIndexOf("\\")+1); //拼接上传路径。存放路径+上传的文件名 tempPath = tempPath+"\\"+fileName; //构建输入输出流 InputStream in = item.getInputStream(); //获取item中的上传文件的输入流 OutputStream out = new FileOutputStream(tempPath); //创建一个文件输出流 //创建一个缓冲区 byte b[] = new byte[1024]; //判断输入流中的数据是否已经读完的标识 int len = -1; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))!=-1就表示in里面还有数据 while((len=in.read(b))!=-1){ //没数据了返回-1 //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath+"\\"+filename)当中 out.write(b, 0, len); } //关闭流 out.close(); in.close(); //删除临时文件 Thread.sleep(1000); item.delete();//删除处理文件上传时生成的临时文件(xxx.tmp文件) tempFileSavePath.add(tempPath); } } }catch(Exception e) { e.printStackTrace(); }