1.来源1:
http://hi.baidu.com/ljmybfq/blog/item/9b1f14ee4ee194f3b3fb957a.html/cmtid/467aff1115dd6f73cb80c401
来源2:
http://zhangjunhd.blog.51cto.com/113473/18331
部分代码经过自己完善和修改,由于自己不熟练,所以基本上通常用到的都加到了里面。
所需包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar
首先下载:commons-fileUpload-1.2 的jar包:http://www.apache.org/commons/,同时可以把commons-IO的jar包一起下载,以后会用到的。
1、上传的前台页面:
<form action="MultipartTestServlet" enctype="multipart/form-data" method="post"> <input type="text" name="username" /><br /> <input type="file" name="myfile" /><br/> <input type="submit" /> </form>
2、上传的后台代码:
通过ServletFileUpload静态类来解析Request,工厂类会对mulipart类的表单中的所有字段进行处理,不只是file字段。
getName()得到文件名,getString()得到表单数据内容,isFormField()可判断是否为普通的表单项。
更多的属性介绍:
http://hi.baidu.com/qdblove/blog/item/c81db602286e3d064afb51dc.html
一个完整的例子:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Access !"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //保存文件到服务器中 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(4096); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(maxPostSize); try { List fileItems = upload.parseRequest(request); Iterator iter = fileItems.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { String name = item.getName(); System.out.println(name); try { item.write(new File(uploadPath + name)); // SaveFile s = new SaveFile(); // s.saveFile(name); } catch (Exception e) { e.printStackTrace(); } } } } catch (FileUploadException e) { e.printStackTrace(); System.out.println(e.getMessage() + "结束"); } }
public void doPost(HttpServletRequest request, HttpServletResponse response){ String path= "C:/upload" ; File uploadPath = new File( path );// 上传文件目录 if (!uploadPath.exists()) { uploadPath.mkdirs(); } File tempPathFile = new File( path+" /temp/");// 临时文件目录 if (! tempPathFile.exists ()) { tempPathFile.mkdirs (); } DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(tempPathFile); // 设置临时文件目录 factory.setSizeThreshold(10 * 1024); // 设置缓冲区大小,这里是10kb ServletFileUpload upload = new ServletFileUpload(factory); // 获取上传对向 upload.setSizeMax(100*1024*1024); //设置上传文件大小的上限,-1表示无上限 List <FileItem> items = upload.parseRequest(request); //上传文件,并解析出所有的表单字段,包括普通字段和文件字段 Iterator<FileItem> it = items.iterator(); while(it.hasNext()){ FileItem fi = (FileItem) it.next(); // if (!UtilValidate.isEmpty(fileName)) {判断是否为空 if(! fi.getName().endsWith(".xls") ){ //判断扩展名 //throws ...; } //如果是普通表单项目,显示表单内容 if(fi.isFormField()){ String fieldName = fi.getFieldName(); if (fieldName.equals("username")) //对应demo1.html中type="text" name="username" System.out.print("the field name is" + fi.getString());//显示表单内容 }else{ // 如果是上传文件,显示文件名 System.out.println( fi.getName() + " " + fi.getContentType() + " " + fi.getSize()); //保存文件,其实就是把缓存里的数据写到目标路径下 if(fi.getName()!=null && fi.getSize()!=0){ File fullFile = new File(fi.getName()); // fi.getName()获得文件名,包括路径 File savedFile= new File(uploadPath + fullFile.getName()); int index = 0; // 文件重名时,添加标识 while (savedFile .exists()) { index++; savedFile = new File(uploadPath, "_" + index + "_" + fullFile.getName()); } fi.write(savedFile); // 写到文件去 fileName = savedFile.getName(); // 写入的文件名 } } } } }
3、编译和配置servlet
先设置classpath,使它包含commons-fileUpload的jar包路径,然后进行编译即可,注意这里的包路径。
然后打开站点下的web-inf路径下的web.xml,在里面添加:
<servlet> <servlet-name>MultipartTestServlet</servlet-name> <servlet-class>upload.MultipartTestServlet</servlet-class> </servlet> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>helloApp.DispatcherServlet</servlet-class> </servlet>
好了,现在就可以文件上传了,不过运行之前记得在c:\下新建tmp和temp文件夹,别忘了,不然程序会报告错误的。
相关推荐
java中用common-fileupload上传文件的一个很简单的demo展示
commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-...
使用commons-fileupload上传文件 使用commons-fileupload上传文件
Common-FileUpload带进度条文件上传
赠送源代码:commons-fileupload-1.3.3-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.3.3.pom; 包含翻译后的API文档:commons-fileupload-1.3.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:...
开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2...
common-fileupload官方文档
最全的common-FileUpload.jar包,里面有三个jar包,绝对你够用
使用commons-fileupload实现的文件上传和下载,上传和下载都没有中文乱码问题
赠送源代码:commons-fileupload-1.4-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.4.pom; 包含翻译后的API文档:commons-fileupload-1.4-javadoc-API文档-中文(简体)版.zip; Maven坐标:commons-...
NULL 博文链接:https://arron-huang.iteye.com/blog/1032585
Common-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-fileupload组件实现文件上传.pdfCommon-...
commons-fileupload 文件上传 中文乱码 多文件上传
common-fileupload控件不能删除临时文件的原因分析 1.分析原因 2.出现条件 3.过程分析 4.解决办法
自己写的使用commons-fileupload包上传文件的简单例子。同时用到的包有commons-io
赠送源代码:commons-fileupload-1.3.1-sources.jar; 包含翻译后的API文档:commons-fileupload-1.3.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:commons-fileupload,artifactId:commons-...
个人使用common-fileupload1.2.2和io-1.3.2时总结
java+servlet+commons-io-2.4.jar+commons-fileupload-1.3.jar实现文件的上传与下载
commons-fileupload-1.4.jar
commons-fileupload-1.2.1-bin commons-fileupload 文件上传 commons-fileupload-1.2.1-bin commons-fileupload 文件上传 jar包 及相关文档