自己的运用:

public void UploadNoteFile(HttpServletRequest request,HttpServletResponse response){
  String path = request.getRealPath("/");
  String url = path + bean.getAttachPath();
  String savepath = new String (url);
   final long MAX_SIZE =Long.parseLong(bean.getAttachment())*1024;// 设置上传文件大小
   //  允许上传的文件格式的列表
    final String[] allowedExt = bean.getAttachType().split(",");
    long size = 0;  //文件大小
   try {
            request.setCharacterEncoding("gb2312");
            if(ServletFileUpload.isMultipartContent(request)){
                ServletFileUpload upload = new ServletFileUpload();
                upload.setSizeMax(MAX_SIZE);
                FileItemIterator iter = upload.getItemIterator(request);
                String subject="",content="";
                 while (iter.hasNext()) {
                     FileItemStream item = iter.next();
                     String name = item.getFieldName();
                     InputStream stream = item.openStream();        
                     if (item.isFormField()) {
                      //帖子标题
                      if(name.equals("subject")){   //获取subjec字段的值(非file字段)
                          subject=Streams.asString(stream);
                          continue;
                         }
                      //帖子详细内容
                      if(name.equals("message")){
                       content=Streams.asString(stream);
                       continue;
                      }
                      //获取控件值
                         System.out.println("控件名称" + name + " 值: "
                             + Streams.asString(stream));           
                     } else {
                      //上传附件
                      if(item.getName()!=null && !"".equals(item.getName())){
                          File file = new File(item.getName());
                          String filename = file.getName();
                          System.out.println("控件名称" + name + " 附件名称"
                              + filename);
                          // 得到去除路径的文件名
                          String t_name = url.substring(url.lastIndexOf("\\") + 1)+filename;
                          // 得到文件的扩展名(无扩展名时将得到全名)
                          String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1); 
                         // 得到文件的大小
                         size =file.length();
                         if ("".equals(path) || size == 0) {
                          System.out.println("请选择上传文件<p />");
                          return;
                         }  
                         // 拒绝接受规定文件格式之外的文件类型
                         int allowFlag = 0;
                         int allowedExtCount = allowedExt.length;
                         for (; allowFlag < allowedExtCount; allowFlag++) {
                          if (allowedExt[allowFlag].equals(t_ext))
                           break;
                         }
                         if (allowFlag == allowedExtCount) {
                          System.out.println("请上传以下类型的文件<p />");
                           for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
                            System.out.println("*." + allowedExt[allowFlag]);
                            return;
                          }
                          long now = System.currentTimeMillis();
                          // 根据系统时间生成上传后保存的文件名
                          String prefix = String.valueOf(now);
                          // 保存的最终文件完整路径
                           BufferedInputStream bis = new BufferedInputStream(stream);
                           BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(savepath + prefix + "." + t_ext)));
                           Streams.copy(bis, bos, true);
                           System.out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext
                             + " &nbsp;&nbsp;文件大小: " + size + "字节<p />");
                      } 
                     }
                 } 
                 //发表新主题
                 addTopic(request,response,subject,content);
             }
        }
        catch(Exception e) {// 处理文件尺寸过大异常
            e.printStackTrace();
            if (e instanceof SizeLimitExceededException) {
              System.out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
              return;
             }
        }
     }

参考文章:http://qmug.javaeye.com/blog/225244

http://ttitfly.javaeye.com/blog/158526

利用ServletFileUpload组件上传文件的更多相关文章

  1. 使用commons-fileUpload组件上传文件

    在近期的一个项目中有用到commons-fileUpload组件进行实现文件上传的功能(由于没用到框架),在使用的过程中有遇到一些问题,经过自己的琢磨也算顺利地将其解决了,在这里做个记录. 一.com ...

  2. EasyUI 关于IE使用window组件上传文件

    有时候IE会对使用window组件上传文件(第二次)不生效,解决方案是: 将该window每次打开的时候,使用: $('#adUploadWindow').window('refresh', 'pan ...

  3. 关于commons-fileupload组件上传文件中文名乱码问题

    java web开发,常用到的文件上传功能,常用的commons-fileupload和commons-io两个jar包.关于如何使用这两个jar来完成文件上传的功能,这里不做详解.使用commons ...

  4. 前台利用jcrop做头像选择预览,后台通过django利用Uploadify组件上传图最终使用PIL做图像裁切

    之前一直使用python的PIL自定义裁切图片,今天有需求需要做一个前端的选择预览页面,索性就把这个功能整理一下,分享给大家. 实现思路: 1.前端页面: 用户选择本地一张图片,然后通过鼠标缩放和移动 ...

  5. javaweb-番外篇-Commons-FileUpload组件上传文件

    一.Commons-FileUpload简介 Commons-FileUpload组件 Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件 ...

  6. Spring中servletFileUpload完成上传文件以及文本的处理

    JSP: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnco ...

  7. 利用WebRequest类上传文件

    说明:1.WebRequest类是一个抽象类,所以上传类实际使用的是其子类 2.打开Fiddler软件,监视正常网页的文件上传,可以看到http协议的请求和响应信息,简略说明 (第一行:请求说明 PO ...

  8. 在Struts2中使用Uploadify组件上传文件

    Uploadify是一个基于Jquery的文件上传组件,官网http://www.uploadify.com/可以在官网获得该组件,运行演示示例,下载帮助文档.     作为Web前端的增强技术,Jq ...

  9. django Form组件 上传文件

    上传文件 注意:FORM表单提交文件要有一个参数enctype="multipart/form-data" 普通上传: urls: url(r'^f1/',views.f1), u ...

随机推荐

  1. STM32库函数开发使用总结

    一.外设常具备的几类寄存器 控制寄存器xxx_CR (Control/Configuration Register): 用来配置.控制响应外设的工作方式,如GPIOx_CRL.AFIO_EXTICR1 ...

  2. gcc向待编译源文件传入参数的方法

    gcc有两种方法向待编译源文件传入参数 第一种 利用–Dmacro=name 编译选项,详见gcc -D选项 第二种 利用链接脚本(*.lds)传入参数,类似于ADS的编译器参数可以被待编译源文件调用 ...

  3. Prism vs MvvmCross

    Prism vs MvvmCross 在上一篇Xamarin开发环境及开发框架初探中,曾简单提到MvvmCross这个Xamarin下的开发框架.最近又评估了一些别的,发现老牌Mvvm框架Prism现 ...

  4. UITextView -- 基础备忘

    UITextView 这篇文章只涉及到基本的使用,日后会写一些关于结合TextKit的备忘 基本属性 let screenSize = UIScreen.mainScreen().bounds.siz ...

  5. 在ajax当中使用url重写来避免url的暴露

    记得一次面试,有这样一道面试题:jsp页面当中需要用到ajax的实现,此时需要调用java的url:此时的问题是如果用户查看页面源码就能看到真是的url,这个问题如何避免.说实话,AJAX我用的只是皮 ...

  6. bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形 容斥

    1914: [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 272  Sol ...

  7. Java线程监听,意外退出线程后自动重启

    Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...

  8. PCB 敷铜间距规则(转)

    第一优先规则: First Object = InPolygon, Second Object = All 第二优先规则:First Object = All, Second Object = All ...

  9. WordPress RokNewsPager插件‘thumb.php’多个安全漏洞

    漏洞名称: WordPress RokNewsPager插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-369 发布时间: 2013-09-24 更新时间: 201 ...

  10. [ZOJ 3622] Magic Number

    Magic Number Time Limit: 2 Seconds      Memory Limit: 32768 KB A positive number y is called magic n ...