`
13146489
  • 浏览: 252180 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

文件上传<一>

    博客分类:
  • java
阅读更多
原文:http://jcyanfan.iteye.com/blog/266542
进行文件上传一般有三种方式
1.        使用 fileUpLoad
2.        使用 smartFileUpLoad(fileUpLoad 优于smartfileupload)
3.        自己编写类似的程序进行解析
fileUpLoad 是 apache 的一个开源项目,用来进行解析带有文件的请求处理。著名的 struts 的FormFile 就是用的它进行解析处理的。
4、       依赖包:commons-io
1.        首先页面上我们需要将表单设置下面类似的参数:
< form method="post" enctype="multipart/form-data" action=”” >
2.        然后我们需要在工程里导入所需要的包,可以在 apache 网站上下载:
http://jakarta.apache.org/commons/fileupload/
3.        在我们的servlet中可以获取到request参数,然后可以这样取传递过来的字段参数及文件参数:
下载commons-fileupload.jar放到Project-name\WEB-INF\lib下
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.*;

public class FileUpload
    extends HttpServlet {
  private static final String CONTENT_TYPE = "text/html; charset=GB2312";
  //Process the HTTP Post request
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    try {
      //临时缓冲文件目录,此处系统默认
      File tempfile = new File(System.getProperty("java.io.tmpdir"));
      DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
      // 设置最多只允许在内存中存储的数据,单位:字节
      diskFileItemFactory.setSizeThreshold(4096);
      //设置缓冲区目录,一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
      diskFileItemFactory.setRepository(tempfile);
      ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory);
      //DiskFileUpload upload = new DiskFileUpload(diskFileItemFactory);
      //设置编码,解决上传文件名乱码
      upload.setHeaderEncoding("GBK");
      // 设置允许用户上传文件大小,单位:字节,这里设为2M
      upload.setSizeMax(2 * 1024 * 1024);
      //开始读取上传信息
      List fileItems = upload.parseRequest(request);
      // 依次处理每个上传的文件
      Iterator iter = fileItems.iterator();
      //正则匹配,过滤路径取文件名
      String regExp = ".+(.+)$";
      //过滤掉的文件类型
      String[] errorType = {
          ".exe", ".com", ".cgi", ".asp"};
      Pattern p = Pattern.compile(regExp);
      while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
        //忽略其他不是文件域的所有表单信息
        if (!item.isFormField()) {
          String name = item.getName();
          long size = item.getSize();
          if ( (name == null || name.equals("")) && size == 0) {
            continue;
          }
          Matcher m = p.matcher(name);
          boolean result = m.find();
          if (result) {
            for (int temp = 0; temp < errorType.length; temp++) {
              if (m.group(1).endsWith(errorType[temp])) {
                throw new IOException(name + ": wrong type");
              }
            }
            //保存上传的文件到指定的目录
            //在下文中上传文件至数据库时,将对这里改写
            item.write(new File("d:\\" + m.group(1)));
            out.print(name + " " + size + "");
          }
        }
      }
    }
    catch (IOException e) {
      e.printStackTrace();
    }
    catch (FileUploadException e) {
      //e.printStackTrace();
    }
  }
}
分享到:
评论

相关推荐

    自制c#版<iframe>查杀软件

    此为本人自制的一款用于查杀&lt;iframe&gt;的软件,在vs 2003环境中利用c#语言开发的一款软件。可以双击readweb.exe直接运行。&lt;br&gt;用人格担保无病毒,但是...&lt;br&gt;上传文件中并不提供源代码,如果大家需要可以给我留言!&lt;br&gt;

    SpringMVC中文件的上传和下载

    一、文件上传 1. **依赖引入**:首先,你需要在项目中引入Spring MVC的依赖,确保`spring-webmvc`库在类路径中。例如,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;dependency&gt; &lt;groupId&gt;...

    JSP文件上传系统

    走过路过千万不要错过,绝对实用!&lt;br&gt;·支持所有的上传的文件类型&lt;br&gt;·原则上不限制上传的文件大小&lt;br&gt;·每次上传格式可用户...且每删除一个数据,上传在文件夹中的文件也相应删除,有效的控制了服务器负荷 &lt;br&gt;&lt;br&gt;

    C#编程经验技巧宝典

    88&lt;br&gt;&lt;br&gt;0136 如何进行文本加密与解密 88&lt;br&gt;&lt;br&gt;0137 如何区别0、空字符串、Null、Empty和Nothing 89&lt;br&gt;&lt;br&gt;0138 从字符串中分离文件路径、文件名及扩展名 89&lt;br&gt;&lt;br&gt;0139 如何批量替换某一类字符串 89...

    springmvc上传文件所需jar包

    在Spring MVC框架中,文件上传是一项常见的功能,用于接收用户通过表单提交的文件,如图片、文档等。为了实现这个功能,我们需要依赖一些特定的jar包。以下是一些核心的依赖及其作用: 1. **Spring MVC框架核心库**...

    java根据xml修改生成新的xml文件.zip

    例如xml文件的形式是&lt;student&gt;&lt;age&gt;1&lt;/age&gt;&lt;age2&gt;2&lt;/age2&gt;&lt;/student&gt;,在Java文件中设置demo路径,要替换的值,最后分别生成xml文件,例如要换成aa,则xml两个,一个为&lt;student&gt;&lt;age&gt;aa&lt;/age&gt;&lt;age&gt;2&lt;/age&gt;&lt;/student&gt;,...

    在线文件管理系统(asp.net 2.0,Ajax,3层架构)

    用vs.net2005写的在线文件管理系统,数据库是sqlser2000.&lt;br&gt;Ajax采用的是asp.net web extension 1.0.&lt;br&gt;实现功能包括:&lt;br&gt;1、一二级目录定制&lt;br&gt;2、大文件上传(200M)&lt;br&gt;3、评论&lt;br&gt;4、权限管理&lt;br&gt;其他自己看吧...

    (asp)化境无组件上传类.rar

    一直以来,由于FileSystemObject的局限,所以ASP最大...就写了这个类,给大家一&lt;br&gt;&lt;br&gt;个方便,整个类放在一个文件中: upload_5xsoft.inc 在 Example 目录下还有一个完整的多文件上传示&lt;br&gt;&lt;br&gt;例程序,可以直接使用。&lt;br&gt;

    Nginx静态文件响应POST请求 提示405错误的解决方法

    &lt;head&gt;&lt;title&gt;405 Not Allowed&lt;/title&gt;&lt;/head&gt; &lt;body bgcolor="white"&gt; &lt;center&gt;&lt;h1&gt;405 Not Allowed&lt;/h1&gt;&lt;/center&gt; &lt;hr&gt;&lt;center&gt;nginx/1.2.0&lt;/center&gt; &lt;/body&gt; &lt;/html&gt; ``` 然而,在某些特殊的应用场景下,...

    基于C++实现类UNIX的二级文件系统源码+课设报告+使用说明(操作系统课程设计).zip

    基于C++实现类UNIX的二级文件系统源码+课设报告+使用说明(操作系统课程设计).zip ...- 12)fout &lt;filename&gt;:将缓存区中的所有字节写入&lt;filename&gt;指向的一级操作系统的实际文件 - 13)bshow :查看缓存区信息

    DotNetTextBox所见即所得编辑器控件 v3.3.1

    &lt;br&gt;&lt;br&gt;2007/7/21&lt;br&gt;Version 3.2.3 Stable&lt;br&gt;&lt;br&gt;Updates:&lt;br&gt;1) 修正上传功能设置为自动改名后,上传文件之后网络地址栏的地址仍然是文件原名的BUG。&lt;br&gt;2) 修正控件在浏览器滚动条下端位置时弹出DIV窗口会出现...

    操作系统课程设计基于C++实现的二级文件系统源码+项目说明+设计报告.zip

    操作系统课程设计基于C++实现的二级文件系统源码+项目说明+设计报告.zip ...- 12)fout &lt;filename&gt;:将缓存区中的所有字节写入&lt;filename&gt;指向的一级操作系统的实际文件 - 13)bshow :查看缓存区信息

    asp.net技术内幕(4)

    &lt;br&gt;4.3.3 使用HTMLInputFile控件接受文件上传 &lt;br&gt;4.4 小结 &lt;br&gt;&lt;br&gt;第二部分 高级ASP.NET页面开发&lt;br&gt;&lt;br&gt;第5章 用用户控件创建自定义控件 &lt;br&gt;&lt;br&gt;5.1 用用户控件包含标准内容 &lt;br&gt;5.2 显露用户控件中的属性和...

    asp.net技术内幕(3)

    &lt;br&gt;4.3.3 使用HTMLInputFile控件接受文件上传 &lt;br&gt;4.4 小结 &lt;br&gt;&lt;br&gt;第二部分 高级ASP.NET页面开发&lt;br&gt;&lt;br&gt;第5章 用用户控件创建自定义控件 &lt;br&gt;&lt;br&gt;5.1 用用户控件包含标准内容 &lt;br&gt;5.2 显露用户控件中的属性和...

    插件接口文件 for dvbbs 6.0

    align=center&gt;&lt;br&gt; &lt;%if not founduser then%&gt;&lt;br&gt; &lt;tr&gt;&lt;td colspan=2&gt;&lt;BR&gt;&lt;br&gt; 欢迎光临 &lt;B&gt;&lt;%=Forum_info(0)%&gt;&lt;/B&gt;.&lt;BR&gt;如果这是你第一次访问本站, 请点击论坛上方的链接阅读&lt;a href=boardhelp.asp&gt;论坛帮助&lt;/a&gt;....

    C#源码大集合 01(共3卷)

    C#源码大集合 01(共3卷)&lt;br&gt;&lt;br&gt;之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)&lt;br&gt;&lt;br&gt;&lt;br&gt;├─C#源码第一部分&lt;br&gt;│ ├─第1章 控件操作&lt;br&gt;│ │ ├─实例1 如何...

    使用 GitHub Maven 插件的示例项目.zip

    &lt;username&gt;user&lt;/username&gt; &lt;password&gt;password&lt;/password&gt; &lt;/server&gt; &lt;/servers&gt;使用下载插件$ cd github-maven-example/example$ mvn clean install已编译的 JAR 文件、源文件和 Javadoc JAR 文件将作为下载上传至...

    一个小巧妙的统计程序

    程序功能:&lt;br&gt; &lt;br&gt; 一个小巧妙的统计程序.&lt;br&gt; &lt;br&gt; 用到知识点:&lt;br&gt; &lt;br&gt; 1.顶层表单的运用.&lt;br&gt; &lt;br&gt; 2.菜单在顶层表单中的运用.&lt;br&gt; ...由于文件上传时不能太大,所以删除了.exe文件. &lt;br&gt; &lt;br&gt;

    edtftpj 2.0.1功能扩展

    /*&lt;br&gt;说明:&lt;br&gt; 一、使用edtftpj 2.0.1开源包&lt;br&gt; 二、实现了以下功能&lt;br&gt; 1、上传指定文件夹(包括子文件和文件夹)&lt;br&gt; 2、下载FTP上指定的文件夹&lt;br&gt; 3、上传指定文件夹下的所有文件到FTP指定目录下&lt;br&gt; 4、...

    C#源码大集合 03(共3卷)

    C#源码大集合 03(共3卷)&lt;br&gt;&lt;br&gt;之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)&lt;br&gt;&lt;br&gt;&lt;br&gt;├─C#源码第一部分&lt;br&gt;│ ├─第1章 控件操作&lt;br&gt;│ │ ├─实例1 如何...

Global site tag (gtag.js) - Google Analytics