input file文件上传简单示例

<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/366346post

这里个人目的是选择一张图片后直接上传到服务器上,没有经过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();
		}
相关文章
相关标签/搜索