`
Beaver's
  • 浏览: 396345 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

server 上传多个文件,修改文件名为 原文件名+系统时间戳

    博客分类:
  • web
 
阅读更多
完整代码如下:
package com.commpim.performance;
/** 
 * @author beaver 
 * @version 创建时间:2011-12-13 下午06:58:52 
 * 上传多个文件
 */
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
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.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;
import org.apache.commons.fileupload.util.Streams;

/**
 * Servlet implementation class for Servlet: UploadFile2Servlet
 *
 */
 public class UploadFile2Servlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
	 //用于存放上传文件的目录
	    private String uploadPath="E:\\upFile\\";
	    private File tempPath=new File("E:\\upFile\\temp");
	    
	    /**
	     * 初始化Servlet,确保需要使用的目录都被建立<br>
	     * @throws javax.servlet.ServletException
	     */
	    
	    @Override
	    public void init() throws ServletException{
	        if(!new File(uploadPath).isDirectory())
	            new File(uploadPath).mkdir();
	        if(!tempPath.isDirectory())
	            tempPath.mkdir();
	    }
	    /**
	     * 销毁Servelt
	     */
	    public void destory(){
	        super.destroy();
	    }
	    
	   /**
	    * @param request
	    * @param response
	    * @throws javax.servlet.ServletException
	    * @throws java.io.IOException
	    */
	    
	    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
	    throws ServletException, IOException {
	        
	        //创建一个上传项目工厂,并设置其缓存数据大小和临时文件保存位置
	        DiskFileItemFactory factory=new DiskFileItemFactory();
	        factory.setSizeThreshold(4096);
	        factory.setRepository(tempPath);
	        
	        //使用项目工厂创建一个ServletFileUpload对象,用于解析文件上传请求
	        //并设置可以上传的文件的最大字节数,超过会抛出异常
	        ServletFileUpload upload=new ServletFileUpload(factory);
	        upload.setSizeMax(100000000);
	        upload.setHeaderEncoding("utf-8");
	        
	        List fileItems=null;
	        try{
	            //开始读取上传信息
	            fileItems=upload.parseRequest(request);
	            //依次处理每一个上传的文件
	            Iterator itor=fileItems.iterator();
	            //正则匹配,过滤路径取文件名
	            String regExp=".+\\\\(.+)$";
	            //过滤文件类型
	            String[] errorType={".exe",".com",".cgi",".asp"};
	            Pattern p=Pattern.compile(regExp);
	            while(itor.hasNext()){
	                FileItem item=(FileItem)itor.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");
	                            }
	                        }
	                        try{
	                            //保存文件到指定的目录,如果是保存到数据库,改写这里
	                        	String fileName = name.substring(item.getName().lastIndexOf("\\")+1, name.length());//获得上传文件的文件名 
	                        	
	                        	String date=new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
	                        	fileName = fileName+"_"+date;
	                        	String fn = uploadPath+fileName;
	        
	                    		File newf = new File(fn);
	                    		if(!newf.exists()) {
	                    			newf.createNewFile();
	                    		}
	                    		InputStream in = item.getInputStream();
	                    		FileOutputStream fo = new FileOutputStream(newf);
	                    		BufferedOutputStream out = new BufferedOutputStream(fo);//获得文件输出流  
	                    		Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹  
	                           // item.write(new File(uploadPath,m.group(1)));
	                                                                        
	                        }catch(Exception e){
	                        }
	                    }else{
	                        throw new IOException("fail to upload");
	                    }
	                }
	            }            
	        }catch(IOException e){
	        	e.printStackTrace();
	        }catch(FileUploadException e1){
	            e1.printStackTrace();
	        }
	        
	    } 
	    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
	    /** 
	    * Handles the HTTP <code>GET</code> method.
	    * @param request servlet request
	    * @param response servlet response
	    */
	    protected void doGet(HttpServletRequest request, HttpServletResponse response)
	    throws ServletException, IOException {
	        processRequest(request, response);
	    }

	    /** 
	    * Handles the HTTP <code>POST</code> method.
	    * @param request servlet request
	    * @param response servlet response
	    */
	    protected void doPost(HttpServletRequest request, HttpServletResponse response)
	    throws ServletException, IOException {
	        processRequest(request, response);
	        
	    }

	    /** 
	    * Returns a short description of the servlet.
	    */
	    public String getServletInfo() {
	        return "cliff";
	    }
	    // </editor-fold>
}

分享到:
评论

相关推荐

    Asp.net同时上传多个文件

    当用户选择文件后,这些文件会被封装在一个名为`HttpPostedFileBase`的对象中,可以通过`Request.Files`集合访问。然而,单个`&lt;input type="file"&gt;`只能选择一个文件,所以要实现多文件上传,我们需要使用HTML5的新...

    FastDFS分布式文件系统分析

    **FastDFS** 是一款基于 C 语言开发的开源分布式文件系统,专为互联网应用设计,旨在提供高性能、高可用性的文件存储解决方案。它具备冗余备份、负载均衡及线性扩展能力,适用于构建大规模文件服务器集群。 #### 二...

    文件上传java测试程序.rar

    为了避免文件名冲突,通常会为上传的文件生成唯一的文件名,这可以通过生成UUID或结合时间戳来实现。 这个“文件上传java测试程序.rar”应该包含了实现上述部分的代码示例,特别是如何在IDEA中配置和运行。通过...

    asp.net文件与图片处理

    ASP.NET 文件与图片处理是Web开发中的重要环节,它涉及到用户交互、文件上传、安全验证以及图像处理等多个方面。在ASP.NET中,处理文件和图片通常利用内置的控件和类库来实现,如FileUpload控件用于文件上传,而...

    FME按属性字段批量将shp转cad模板、教程及示例数据.rar

    标题中的"FME按属性字段批量将shp转cad模板"涉及到的是GIS(地理信息系统)领域的一个常见任务,即使用FME(Feature Manipulation Engine)工具将Shapefile(一种常见的矢量地理数据格式)转换为CAD(Computer-Aided...

    servlet jsp javabean 实现的文件上传

    这里我们将深入探讨如何使用这三个技术实现文件上传功能。 Servlet是Java编程语言中的一个接口,由Java Servlet API提供,用于扩展服务器的功能。在文件上传场景中,Servlet通常作为接收HTTP请求并处理数据的后端...

    asp.net中多文件上传学习笔记

    在ASP.NET中,多文件上传是一项常见的功能,用于在B/S(浏览器/服务器)架构下处理用户上传的多个文件。本学习笔记将详细介绍如何在ASP.NET环境中实现这一功能,并确保文件上传时不重复。 首先,我们需要了解ASP...

    Windows系统自动批量创建文件.zip

    假设我们要创建一个名为"example.txt"的文件,并在其中写入"Hello, World!",脚本中会包含类似`echo Hello, World! &gt; example.txt`的命令。`&gt;`符号是重定向操作符,它把命令的输出重定向到文件中,如果文件不存在,...

    JSP实现文件上传(java的io流实现)

    这个表单通常会包含一个`&lt;input type="file"&gt;`元素,允许用户从本地文件系统选择文件。例如: ```html ``` 这里的`enctype="multipart/form-data"`至关重要,因为它告诉浏览器以多部分/二进制格式发送数据,...

    C#文件上传完整代码

    如果需要上传多个文件,可以添加多个这样的控件。 接着,确保`&lt;form&gt;`标签包含以下属性: ```html &lt;form method="post" enctype="multipart/form-data" runat="server"&gt; ``` `enctype="multipart/form-data"`是至关...

    asp.net上传文件

    这里使用当前时间戳作为文件名的一部分,以避免文件名重复,这对于大型系统中处理大量文件尤为重要。 #### 6. 保存文件 ```csharp _upfile.SaveAs(playFile); ``` 最后,使用`SaveAs`方法将文件保存到服务器上的...

    ASP.NET文件上传帮助类 |C#文件上传

    5. **多文件上传**:虽然这里只提到单个文件上传,但帮助类也可以扩展支持多个文件上传。只需遍历`Request.Files`集合即可处理每个上传的文件。 下面是一个简单的`UpLoadFile.cs`类的示例实现: ```csharp using ...

    多文件上传.net关于.net的方面的.

    在.NET框架中,多文件上传是一项常见的功能,尤其在Web应用程序中,用户可能需要一次上传多个文件,例如图片、文档或其他类型的数据。本篇将详细探讨如何在ASP.NET环境中实现多文件上传,以及相关的技术要点。 首先...

    FASTdfs集群搭建手册1

    分布式文件系统FastDFS是一款用C语言编写的开源文件系统,专为互联网设计,注重冗余备份、负载均衡和线性扩展。它提供了高效的文件上传和下载服务,方便构建高性能的文件服务器集群。FastDFS架构主要由Tracker ...

    Fastdfs搭建

    FastDFS支持集群部署,Tracker Server可以有多个,它们之间是平等关系,互相备份,避免单点故障。客户端通过轮询方式与Tracker Server交互。Storage Server集群采用分组存储模式,一个组内的Server互相同步文件,...

    文件上传图片文件上传

    这段代码展示了如何在Web应用中实现图片文件的上传验证、存储以及添加水印的过程,涵盖了文件类型和大小的检查、图像格式的转换和水印的添加等多个细节,对于开发人员理解和实现类似的文件上传功能具有较高的参考...

    asp 批量上传源代码

    【ASP批量上传源代码】是一种在ASP(Active Server Pages)环境中实现文件批量上传的技术,它大大提升了用户体验,避免了用户需要逐个上传文件的繁琐过程。ASP是微软开发的一种服务器端脚本语言,常用于构建动态网页...

    一个简单的JSP+Servlet图片上传例子

    Java标准库提供了一个名为`javax.servlet.http.Part`的接口,可以用来处理这些上传的文件。 具体实现时,Servlet需要实现`doPost`方法,这是HTTP POST请求的处理点。在`doPost`中,我们可以遍历`HttpServletRequest...

    单个文件上传asp.net 2.0+vb.net

    - **文件名重命名**:为了避免文件名冲突,通常会在保存文件时为其生成唯一的名称,例如结合时间戳或随机数。 - **权限控制**:确保只有授权用户才能上传文件,并对上传目录设置适当的读写权限。 5. **错误处理**...

    文件安全传输系统实验报告1

    6. **数据库管理**:实验中使用了MySQL数据库存储用户信息,创建了名为`filetransfer`的数据库,以及包含`id`、`username`和`password`字段的`user`表,用于用户注册和登录。 7. **Python编程**:实验使用Python ...

Global site tag (gtag.js) - Google Analytics