当前位置: 代码迷 >> Web前端 >> 文件下传的使用技巧
  详细解决方案

文件下传的使用技巧

热度:117   发布时间:2012-11-23 22:54:33.0
文件上传的使用技巧
    相信大家都文件上传比不陌生,也有许多不同的处理方法。文件上传不仅要在前端页面进行格式校验,在后端服务也要进行各种可能性的校验。就拿图片来说吧,首先在前端要判断是否是图片格式,而服务还要判断文件是否存在,图片大小的限制,生成图片的缩略图等等。如果这些功能全部都有自己来写那该多累啊,效率也不高。
    对于java文件上传也有许多的第三方包,其中commons-fileupload和commons-io的包很好用,也给我带来了很多方便。下面就以一小段代码来讲讲它的使用方法:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		if (!ServletFileUpload.isMultipartContent(req)) {
			// TODO 该表单不符合文件上传规则,对前端页面返回错误信息。
			//......
			return;
		}
		//MyServlet是本方法类的servlet
		//通过本类获取相对的URL,同时得到保存缓存的文件路径
		//你也可以通过自己指定的路径,而不必非得这么做
		URL url = MyServlet.class.getResource("");
		File file = new File(url.getFile() + "tmp");
		if (!file.isDirectory())
			file.mkdir();
		// 该提示符合文件上传规则,在此处对文件上传数据进行处理。
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 设定使用内存超过512KB时,将产生临时文件并存储于临时目录中。
		factory.setSizeThreshold(512 * 1024);
		// 设定存储临时文件的目录。
		factory.setRepository(file);
		ServletFileUpload fileUpload = new ServletFileUpload(factory);
		// 设定默认或最大允许上传5MB的文件。
		fileUpload.setSizeMax(5 * 1024 * 1024);
		try {
			List<FileItem> fileItems = fileUpload.parseRequest(req);
			for (FileItem fileItem : fileItems) {
				if (!fileItem.isFormField()) {
					byte[] bs = fileItem.get();
					//TODO 这里已经获取到上传的文件字节,进行对数据的保存等等
					//...
					break;
				}
			}
		} catch (Exception e) {
			//TODO 返回错误信息给页面
		}
	}

    以上代码已经比较好的说明是文件上传的使用,在这里所使用的是commons-fileupload-1.2.1.jar和commons-io-1.4.jar。
  相关解决方案