`
canofy
  • 浏览: 830104 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

java jakata commons上传

    博客分类:
  • j2EE
阅读更多
upload.java
import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;


public class Upload extends HttpServlet {


     private static final long serialVersionUID = 1L;

 

     public void doPost(HttpServletRequest request, HttpServletResponse response)

              throws ServletException, IOException {
    	 
    	 //    	解决中文乱码
    	 
    	 String encoding="utf-8";
    	 
    	 request.setCharacterEncoding(encoding); 

         response.setContentType("text/html; charset=utf-8");

         PrintWriter out = response.getWriter();

         try {

              DiskFileItemFactory factory = new DiskFileItemFactory(); 

              ServletFileUpload sevletFileUpload = new ServletFileUpload(factory);

              // 设置允许用户上传文件大小,单位:字节,这里设为2m

              sevletFileUpload.setSizeMax(2 * 1024 * 1024 * 100);

              // 设置最多只允许在内存中存储的数据,单位:字节

              factory.setSizeThreshold(4096);

              // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

              factory.setRepository(new File("d:\\upload\\temp"));

              // 开始读取上传信息 

              List fileItems = sevletFileUpload.parseRequest(request);

              // 依次处理每个上传的文件

              Iterator iter = fileItems.iterator(); 

              // 正则匹配,过滤路径取文件名

              String regExp = ".+\\\\(.+)$";
              
              //上传的路径
              
              String path="D:\\upload\\";

              // 过滤掉的文件类型

              String[] errorType = { ".exe", ".com", ".cgi", ".asp",".class" };
              
             String[] accessType={".rar",".txt"};

              Pattern p = Pattern.compile(regExp);

              while (iter.hasNext()) {

                   FileItem item = (FileItem) iter.next();

                   // 忽略其他不是文件域的所有表单信息

                   if (!item.isFormField()) {
                	   
                	  
                       String name = item.getName();

                       long size = item.getSize();
                       
                       double mSize=size/(1024);

                       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 + ": 非法文件类型禁止上传");

                               }

                          }

//                            for (int temp = 0; temp < accessType.length; temp++) {
//
//                                 if (!m.group(1).endsWith(accessType[temp])) {
//
//                                     throw new IOException(name + ": 非法文件类型禁止上传");
//
//                                 }
//
//                            }

                            try {

                                 // 保存上传的文件到指定的目录
                            	
                            	item.write(new File(path+ m.group(1))); 

                                 // 在下文中上传文件至数据库时,将对这里改写开始
                            	
                            	
                            	
                            	String str=m.group(1);
                            	
                            	int start=str.lastIndexOf(".")+1;
                            	
                            	int end=str.length();
                            	
                            	String fileName=str.substring(0,start-1);
                            	
                            	String type=m.group(1).substring(start, end);
                            	
                            	Date date=new Date();

                            	Calendar calendar=new GregorianCalendar();
                            	
                            	String printDate=calendar.get(calendar.YEAR)+"年";
                            	
                            	printDate+=(calendar.get(calendar.MONTH)+1)+"月";
                            	
                            	printDate+=calendar.get(calendar.DAY_OF_MONTH)+"日";
                            	
                            	SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日");
                            	
                            	//simpleDateFormat.format(date).toString();

                                 out.print("文件上传成功:<br>");
                                 
                                 out.print("文件名:"+name + "&nbsp;&nbsp;" +"<br>");
                                 
                                 out.print("上传后的文件:"+path+m.group(1)+"<br>");
                                 
                                 out.print("文件大小:"+ mSize + "K<br>");
                                 
                                 out.print("文件格式:"+type+"<br>");
                                 
                                 out.print("文件名:"+fileName+"<br>");
                                 
                                 out.print("上传时间: "+printDate+"<br>");
                                 
                                 out.print("simpleDateFormat:"+simpleDateFormat.format(date).toString());

                                 // 在下文中上传文件至数据库时,将对这里改写结束

                            } catch (Exception e) {

                                 out.println(e);

                            }
                       } else {

                            throw new IOException("上传失败!");

                       }

                   }

              }

         } catch (IOException e) {

              out.println(e);

         } catch (FileUploadException e) {

              out.println(e);

         }

     }

}


demo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>DEMO</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    upload
    <form action="upload" method="post" enctype="multipart/form-data" name="form1">
    	<input type="file" name="file" />
    	<input type="submit" name="submit" value="上传" />     
    </form>
     <br>
  </body>
</html>


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>Upload</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>upload</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping>
</web-app>

需要的包有:commons-io commons-fileupload
分享到:
评论

相关推荐

    Apache Jakarta Commons 使用手册

    《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为开发者提供一个全面深入理解并应用这些组件的学习资源。Apache Jakarta ...

    jakarta commons cookbook.zip

    《Jakarta Commons Cookbook》是Java开发者的一份宝贵资源,它包含了一系列实用的工具类和组件,可以帮助开发者在日常编程工作中提高效率。Jakarta Commons是Apache软件基金会的一个项目,旨在为Java社区提供一系列...

    Jakarta Commons使用

    Jakarta Commons 是一个 Apache 软件基金会的项目,它包含了一系列独立、可重用的 Java 类库,旨在提供常见编程任务的解决方案。这些类库覆盖了从输入输出处理到字符串操作,再到网络通信等多个领域。Jakarta ...

    Jakarta Commons

    Jakarta Commons 是 Apache 软件基金会的一个项目集合,它提供了大量的可重用 Java 类库,旨在简化开发人员的工作。这些类库覆盖了从文件上传、缓存处理到网络通信等多个领域,极大地丰富了Java 开发者的工具箱。...

    JAKARTA COMMONS

    Apache Jakarta Commons 是一组由 Apache 软件基金会提供的 Java 库,这些库旨在解决常见的编程问题,提供便捷的功能,减少开发人员重复编写基础代码的工作。Jakarta Commons 包含了许多子项目,每个子项目专注于...

    Jakarta Commons Online Bookshelf

    Jakarta Commons是一系列开源、模块化的Java库,旨在解决软件开发中的常见问题,提高开发效率,减少重复工作。通过阅读本书,读者将能够了解Jakarta Commons的历史背景、组织结构、设计理念及其在实际项目中的应用。...

    Jakarta commons docs API CHM 格式

    commons-fileupload 使得在你可以在应用和Servlet中容易的加入强大和高性能的文件上传能力 commons-io 用来帮助进行IO功能开发.它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-...

    Jakarta Commons FileUpload 用户指南

    - **Jakarta Commons FileUpload** 是一个用于处理HTTP文件上传的Java库,它基于**RFC1867**标准来解析和处理文件上传请求。 - **用户指南** 主要介绍了如何使用FileUpload来处理来自客户端的文件上传请求,包括基本...

    介绍Jakarta Commons的烹饪书

    《Jakarta Commons 烹饪书》是一本详细介绍Jakarta Commons组件使用和开发的资源,主要面向Java开发者。Jakarta Commons是Apache软件基金会的一个项目,它包含了一系列实用的、独立的Java类库,旨在简化开发过程,...

    [Jakarta Commons笔记]

    Jakarta Commons是Apache软件基金会的一个项目集合,它提供了许多Java开发中常用的工具类和组件。这个项目旨在减少重复的工作,通过共享和重用代码,提高开发效率。Jakarta Commons包含了多个子项目,每个子项目专注...

    Jakarta Commons Cookbook(CHM)

    Apache Jakarta Commons是Apache软件基金会的一个项目,它提供了大量的Java类库,这些类库解决了常见的编程任务,包括输入/输出、数学计算、字符串处理、日期和时间操作等。 本书的核心知识点可以分为以下几个部分...

    Iverson book Apache Jakarta Commons[E文版]

    Apache Jakarta Commons是Apache软件基金会的一个项目集合,它提供了一系列实用工具类库,旨在简化Java开发。这个项目的主要目标是创建可重用的Java组件,这些组件涵盖了从数据处理到网络通信的各种领域。Iverson的...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-fileupload 使得在你可以在应用和Servlet中容易的加入强大和高性能的文件上传能力 commons-io 用来帮助进行IO功能开发.它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-...

    Pro.Jakarta.Commons.rar

    Apache Jakarta Commons是Java开发的一个重要组件集合,它为开发者提供了大量实用的工具类和组件,极大地简化了常见的编程任务。这个压缩包“Pro.Jakarta.Commons.rar”包含的是关于Jakarta Commons的详细文档,主要...

    jakarta-commons.zip

    Jakarta Commons是Apache软件基金会的一个项目集合,它包含了一系列实用工具类库,为Java开发者提供了大量方便的功能。这个"2013最新版的jakarta-commons.zip"压缩包很可能包含了当年Jakarta Commons项目的各个子...

    Jakarta+Commons+学习

    Jakarta Commons 是一个由 Apache 软件基金会维护的 Java 开源项目集合,它提供了大量的实用工具类和组件,极大地丰富了 Java 的标准库功能。这个项目旨在解决常见的编程问题,提高开发效率,提供了一系列模块化的...

    jakarta-commons的jar包

    Jakarta Commons是Apache软件基金会的一个项目集合,它提供了一系列实用工具类和组件,极大地丰富了Java开发者在构建应用程序时的工具箱。这个jar包在J2EE(Java 2 Platform, Enterprise Edition)开发中尤其常见,...

    apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    Apache的FTP库是Java开发中一个非常实用的工具,它主要包含了两个核心的JAR包:`commons-net-1.4.1.jar`和`jakarta-oro-2.0.8.jar`。这两个包提供了丰富的功能,允许开发者在Java应用中实现FTP(文件传输协议)的...

Global site tag (gtag.js) - Google Analytics