<form action="<%=request.getContextPath()%>/chat" method="post" enctype="multipart/form-data" data-ajax="false" name="form" id="form" target="relnews"> <input type="hidden" name="name" id="name" value="" /> <input type="hidden" name="taskId" id="taskId" value="" /> <input type="file" name="image" id="image" class="photo" onchange="sendImage(this)" /> </form>
<!-- 隐藏域做为表单提交后页面不跳转使用 --> <iframe align="center" frameborder="0" marginheight="0" marginwidth="0" name="relnews" id="hiddenIframe" scrolling="no" style="width: 100%; height: 100%; display: none"> </iframe>
js: function sendMessage() { var text = DWRUtil.getValue("message"); if("" != text){ DWRUtil.setValue("message", ""); Chat.addMessage(text, name, taskId, gotMessages); } }
直接上代码解释:java
jar包:commons-io-1.4.jarajax
commons-fileupload-1.2.2.jar服务器
log4j-1.2.14.jar框架
若是参考我写的框架还须要加入dwr的jar包:dwr.jar工具
(广告时间:个人action 调用的js 是 用的dwr 提交实现的,有兴趣的能够参考博文http://my.oschina.net/u/1790925/blog/366346)post
这里个人目的是选择一张图片后直接上传到服务器上,没有经过submit按钮提交,同时要把一些文字信息带入,由于上传图片的关键要设置this
enctype="multipart/form-data"
而这个设置以后。后台则没法经过request方法直接得到文字属性了。因此后台取值也采用了特殊的方法。编码
/** * 原生request处理图片上传 * * */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //获取请求URL String url = request.getContextPath(); //建立图片工厂类 DiskFileItemFactory factory = new DiskFileItemFactory(); //建立上传工具类 ServletFileUpload uploader = new ServletFileUpload(factory); List<FileItem> list = null; try { //格式化request list = uploader.parseRequest(request); } catch (FileUploadException e1) { e1.printStackTrace(); } String name = "";//用户名 String taskid = "";//任务ID String fileName = "";//文件名称 for (FileItem item : list) { if (item.isFormField()) { // 处理普通表单域,form表单设置enctype="multipart/form-data" 时 表单中其余input控件须要经过该方式取值 String field = item.getFieldName();// 表单域名,既参数名称 if (field.equals("name")) { name = item.getString("UTF-8");// 这里须要设置页面的编码方式,与页面编码方式相同 } else if (field.equals("taskId")) { taskid = item.getString("UTF-8");// 同上 } } else { fileName = item.getName();// 文件名称 int index = fileName.lastIndexOf("\\"); if (index != -1) { fileName = fileName.substring(index + 1); } // 建立一个以当前时间+文件名格式的图片名称,如图片名:image.png → 20150108082222image.png 以确保图片惟一 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); fileName = sdf.format(new Date()) + fileName; //判断是否存在图片文件夹不存在则新建 try { if (!(new File(getServletContext().getRealPath( "/pic")).isDirectory())) { new File(getServletContext().getRealPath( "/pic")).mkdir(); } } catch (SecurityException e) { e.printStackTrace(); } //图片上传到服务器路径下的pic目录中 String filepath = "pic/" + fileName; try { item.write(new File(getServletContext().getRealPath( "/" + filepath))); } catch (Exception e) { e.printStackTrace(); }// 执行保存 } if (!item.isInMemory()) item.delete(); }