private String uploadFields(HttpServletRequest request, Map<String, String> map) { // 獲取request中的請求參數(shù) DiskFileItemFactory dfif = new DiskFileItemFactory(); ServletFileUpload sfu = new ServletFileUpload(dfif); sfu.setHeaderEncoding("UTF-8"); String file = null; try { List<FileItem> list = sfu.parseRequest(request); // 遍歷所有參數(shù) 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創(chuàng)建文件名稱 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中返回給調用函數(shù) // filter無法對文件上傳進行過濾,所以需要手動對編碼轉換。 map.put(fi.getFieldName(), new String(fi.getString() .getBytes("iso8859-1"), "UTF-8")); } } } catch (Exception e) { e.printStackTrace(); } // 返回在服務器保存后的文件路徑。 return "images/" + file; } |