private String uploadFields(HttpServletRequest request, Map<String, String> map) { // 获取request中的请求参数 DiskFileItemFactory dfif = new DiskFileItemFactory(); ServletFileUpload sfu = new ServletFileUpload(dfif); sfu.setHeaderEncoding("UTF-8"); String file = null; try { List<FileItem> list = sfu.parseRequest(request); // 遍历所有参数 for (Iterator<FileItem> its = list.iterator(); its.hasNext();) { FileItem fi = its.next(); // 是否为表单字段,如果不是则为文件上传输入流。 if (!fi.isFormField()) { InputStream is = fi.getInputStream(); // 获取图片目录 String dir = this.getServletContext().getRealPath("/") + "/images/"; File dirF = new File(dir); if (!dirF.exists()) dirF.mkdirs(); // 使用UUID创建文件名称 file = UUID.randomUUID().toString() + fi.getName().substring( fi.getName().lastIndexOf(".")); // 写出文件 byte[] buf = new byte[1024]; int len = 0; FileOutputStream fos = new FileOutputStream(new File(dir + file)); while ((len = is.read(buf)) != -1) { fos.write(buf, 0, len); } // 关闭流 fos.close(); is.close(); fi.delete(); } else { // 如果为表单字段,则将这些信息添加到map中返回给调用函数 // filter无法对文件上传进行过滤,所以需要手动对编码转换。 map.put(fi.getFieldName(), new String(fi.getString() .getBytes("iso8859-1"), "UTF-8")); } } } catch (Exception e) { e.printStackTrace(); } // 返回在服务器保存后的文件路径。 return "images/" + file; } |