部分轉載於:
http://blog.csdn.net/georgejin/article/details/1706647
http://www.cnblogs.com/loveyunk/p/6089032.html
http://www.cnblogs.com/greenteaone/p/4186619.html
from表單中向后台傳遞參數的同時要上傳文件,所以ENCTYPE="multipart/form-data" 必須要加在form里面,可是這樣的話,我在servlet里面用request.getParameter()方法無論如何都只是獲得null值.
我這里使用的是commons fileupload的jar包(commons-fileupload-1.2.jar).
先附錄之前寫的上傳文件的工具類:
1 public class FileUploadAndDown { 2 3 private Logger logger = Logger.getLogger(FileUploadAndDown.class); 4 5 public String upload(ServletConfig servletconfig, HttpServletRequest request)throws FileUploadException{ 6 HttpSession session = request.getSession(); 7 String username = session.getAttribute("username").toString(); 8 DiskFileUpload fu = new DiskFileUpload(); 9 // 判斷表單是否設置了mutipart/form-data 10 boolean isMultipart = DiskFileUpload.isMultipartContent(request); 11 if (!isMultipart){ 12 return null; 13 }else{ 14 fu.setHeaderEncoding(request.getCharacterEncoding()); 15 // 設置允許用戶上傳文件大小,單位:字節 16 fu.setSizeMax(10*1024*1024); 17 // 設置最多只允許在內存中存儲的數據,單位:字節 18 fu.setSizeThreshold(4*1024*1024); 19 // 設置一旦文件大小超過getSizeThreshold()的值時數據存放在硬盤的目錄 20 String temp = System.getProperty("user.home")+File.separator+"catalogupload"; 21 fu.setRepositoryPath(temp); 22 File file = new File(temp); 23 if (!file.exists() || !file.isDirectory()) { 24 file.mkdir(); 25 } 26 // 開始讀取上傳信息 27 28 List fileItems = fu.parseRequest(request); 29 // 依次處理每個上傳的文件 30 31 Iterator iter = fileItems.iterator(); 32 // 如果需要上傳多個文件,將if改稱while即可 33 while(iter.hasNext()) { 34 FileItem item = (FileItem) iter.next(); 35 // 忽略其他不是文件域的所有表單信息 36 37 if (!item.isFormField()) { 38 String name = item.getName(); 39 String time = DateUtil.getDateTime("yyyyMMddHHmmss"); 40 name = username + "_" + time + FileNameUtil.extractFileExt(name); 41 try { 42 String namepath = servletconfig.getServletContext().getRealPath("poster"); 43 file = new File(namepath); 44 if(!file.exists()){ 45 file.mkdirs(); 46 } 47 name = namepath+File.separator+name; 48 item.write(new File(name)); 49 logger.info("上傳海報名為:" + name); 50 return name; 51 } catch (Exception e) { 52 logger.error("上傳海報保存異常" + e.getMessage()); 53 return null; 54 } 55 } 56 } 57 } 58 return ""; 59 } 60 }
對應的jsp頁面
1 <form name="form1" action="deleteMmobject.do" method="post" enctype="multipart/form-data" target="displayprocess" > 2 導入要刪除列表文件 3 <input type="hidden" id="deleteFlagHidden" name="deleteFlagHidden" value="" /> 4 <input type="hidden" name="action" value="" /> 5 6 <input type="file" name="filepath" /> 7 <input name="deleteMmobject_radio" id="selfDelete" type="radio" value="自刪除" onclick="selfDeleteFun()"; checked />自刪除 8 <input name="deleteMmobject_radio" id="sendToBoDelete" type="radio" value="同時下發刪除到下游" onclick="sendToBoDeleteFun()" />同時下發刪除到下游 9 <input type="button" value="確定" onclick="deleteFun()"/> 10 <!-- <input type="submit" value="確定" /> --> 11 </form>
通過servlet里面用request.getParameter("id名稱")方法無論如何都只是獲得null值. 通過更換上傳依賴的jar包(jspsmartupload.jar)
新加代碼如下:
1 public Map<String,String> uploadUseJspSmart(ServletConfig servletconfig, HttpServletRequest request, HttpServletResponse response)throws FileUploadException{ 2 Map<String,String> uploadParametersMap = new HashMap<String,String>(); 3 HttpSession session = request.getSession(); 4 String username = session.getAttribute("username").toString(); 5 6 com.jspsmart.upload.SmartUpload smartUpload = new com.jspsmart.upload.SmartUpload(); 7 File file = null; 8 String fileName = null; 9 try { 10 smartUpload.initialize(servletconfig, request, response); 11 smartUpload.setTotalMaxFileSize(100000000); 12 smartUpload.setAllowedFilesList("txt,excel"); 13 smartUpload.setDeniedFilesList("exe,bat,jsp,htm,html,,"); 14 15 smartUpload.upload(); 16 // 得到上傳的文件對象 17 com.jspsmart.upload.File smartFile = smartUpload.getFiles().getFile(0); 18 19 fileName = smartFile.getFileName(); 20 String time = DateUtil.getDateTime("yyyyMMddHHmmss"); 21 fileName = username + "_" + time + FileNameUtil.extractFileExt(fileName); 22 String namepath = System.getProperty("user.home")+File.separator+"catalogupload"; 23 24 file = new File(namepath); 25 if(!file.exists()){ 26 file.mkdirs(); 27 } 28 fileName = namepath+File.separator+fileName; 29 smartFile.saveAs(fileName); 30 logger.info("通過JspSamrt上傳文件名為:" + fileName+"成功"); 31 //這里可以順利得到jsp頁面form表單中對應的"deleteFlagHidden"參數 32 String deleteFlagHidden = smartUpload.getRequest().getParameter("deleteFlagHidden"); 33 uploadParametersMap.put("fileName", fileName); 34 uploadParametersMap.put("deleteFlagHidden", deleteFlagHidden); 35 return uploadParametersMap; 36 } catch (Exception e1) { 37 e1.printStackTrace(); 38 logger.info("通過JspSamrt上傳文件名為:" + fileName+"失敗"); 39 } 40 return null; 41 }