上传文件无重复命名

 

1.SmartUpload 上传代码

//利用IP TIME 随机数组成的实现类(smartupload)

package com.cn;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class IpTimeStamp {
 
 private String ip = null;
 private SimpleDateFormat sdf = null;
 
 public IpTimeStamp(){}
 public IpTimeStamp(String ip)
 {
  this.ip = ip;
 }
 public String getIPTimeRand()
 {
  StringBuffer sb = new StringBuffer();
  if(this.ip!= null)
  {
   String s[] = this.ip.split("\\.");
   for(int i=0;i<s.length;i++)
   {
    sb.append(this.addZero(s[i], 3));
   }
  }
  sb.append(this.getTimeStamp());
  Random r = new Random();
  for(int i=0;i<3;i++)
  {
   sb.append(r.nextInt(10));
  }
  return sb.toString();
  
  
 }
 public String getDate(){
  this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
  return this.sdf.format(new Date());
 }
 public String getTimeStamp()
 {
  this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
  return this.sdf.format(new Date());
 }
 private String addZero(String str,int len){
  StringBuffer s = new StringBuffer();
  s.append(str);
  while(s.length()<len){
   s.insert(0, "0");
  }
  return s.toString();
 }
 
 public static void main(String[] args) {
   System.out.println(new IpTimeStamp("192.168.1.1").getIPTimeRand());
 }

}

//单个上传JSP页面

  <%
      SmartUpload smart = new SmartUpload();
      smart.initialize(pageContext);//初始化上传操作
      smart.upload();//上传准备
      String name = smart.getRequest().getParameter("uname");
      IpTimeStamp its = new IpTimeStamp(request.getRemoteAddr());//取得IP地址
     
      String ext = smart.getFiles().getFile(0).getFileExt();//取得扩展名
     
      String fileName = its.getIPTimeRand()+ "." + ext;
     
      smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+"upload" + java.io.File.separator +fileName);
   
     %>
    
     <%=smart.getFiles().getFile(0).getFileName().matches("^\\w+.(JPG|gif)$") %>  //利用正规表达式来控制上传文件的格式
    
     <h1>姓名:<%=name %></h1>
    
    <img src="<%=request.getContextPath() %>/upload/<%=fileName %>">

 

//多个页面上传JSP页面

<%
      SmartUpload smart = new SmartUpload();
      smart.initialize(pageContext);//初始化上传操作
      smart.upload();//上传准备
      String name = smart.getRequest().getParameter("uname");
      IpTimeStamp its = new IpTimeStamp(request.getRemoteAddr());//取得IP地址
     
      for(int i=0;i<smart.getFiles().getCount();i++)
      {
     
      String ext = smart.getFiles().getFile(i).getFileExt();//取得扩展名
     
      String fileName = its.getIPTimeRand()+ "." + ext;
     
      smart.getFiles().getFile(i).saveAs(this.getServletContext().getRealPath("/")+"upload" + java.io.File.separator +fileName);
      }
     %>
    

 

2.FileUpload 上传代码

 

(1)上传工具类

package com.cn;
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
import com.cn.*;

public class FileUploadTools {
 
 private HttpServletRequest request = null;
 private List<FileItem> items = null;
 private Map<String,List<String>> params = new HashMap<String, List<String>>();
 private Map<String,FileItem>  files = new HashMap<String, FileItem>();
 
 public FileUploadTools(HttpServletRequest request,int maxSize,String tempDir) throws Exception
 {
    this.request = request;
    DiskFileItemFactory   factory  = new DiskFileItemFactory();
      
    if(tempDir !=null){
        factory.setRepository(new File(tempDir));
    }
    ServletFileUpload upload = new ServletFileUpload(factory);
    if(maxSize >0){
     upload.setFileSizeMax(maxSize);
    }
    this.items = upload.parseRequest(request);
    this.init();
 }
 private void init(){
  Iterator<FileItem> iter = this.items.iterator();
  IpTimeStamp its = new IpTimeStamp(this.request.getRemoteAddr());
  while(iter.hasNext())
  {
   FileItem item = iter.next();
   if(item.isFormField()){   //是普通参数
    String name = item.getFieldName();
    String value = item.getString();
    List<String> temp = null;
    if(this.params.containsKey(name))
    {
     temp = this.params.get(name);
    }else{
    temp = new ArrayList<String>();
    }
    temp.add(value);
    this.params.put(name, temp);
   }else{
    String fileName = its.getIPTimeRand() + "." + item.getName().split("\\.");
    this.files.put(fileName, item);
   }
  }
 }
 public String getParameter(String name){ //根据参数名称取出
      String ret = null;
      List<String> temp = this.params.get(name);
      if(temp != null){
       ret = temp.get(0);
      }
      return ret;
     }
    public String[] getParameterValues(String name){
           String ret[] = null;
           List<String> temp = this.params.get(name);
           if(temp != null){
            ret = temp.toArray(new String[]{});
           }
           return ret;
          }
    public Map<String ,FileItem> getUploadFile(){
         return this.files;
        }
        //保存之后一定要有名字
    public List<String> saveAll(String saveDir) throws IOException{
         List<String> names = new ArrayList<String>();
         if(this.files.size()>0){ //有内容
          Set<String> keys = this.files.keySet(); //key是文件
          Iterator<String> iter = keys.iterator();
          File saveFile = null;
          InputStream input =null;
          OutputStream out = null;
          while(iter.hasNext()){
           FileItem item = this.files.get(iter.next());
           String fileName = new IpTimeStamp(request.getRemoteAddr()).getIPTimeRand()+"."+item.getName().split("\\.")[1];
           saveFile = new File(saveDir + fileName);
           names.add(fileName);
           try{
            input = item.getInputStream();
            out = new FileOutputStream(saveFile);
            int temp = 0;
            byte data[]  = new byte[512];
            while((temp = input.read(data,0,512))!=-1){
             out.write(data);
            }
            
           }catch(IOException e){
            throw e;
           }finally{
            try{
             input.close();
             out.close();
            }catch(IOException e1){
             throw e1;
            }
           }
          }
          
         }
         return names;
        }
}

 

 

//JSP单表接收页面

  <%
      DiskFileItemFactory   factory  = new DiskFileItemFactory();
      factory.setRepository(new File(this.getServletContext().getRealPath("/")+"upload"));
      ServletFileUpload upload  = new ServletFileUpload(factory);
      upload.setFileSizeMax(3 * 1024 * 1024);// 只能上传3M
      List<FileItem> items = upload.parseRequest(request);  //接收全部内容
      Iterator<FileItem> iter = items.iterator();
      IpTimeStamp  its = new IpTimeStamp(request.getRemoteAddr());
      while(iter.hasNext())
      {
        FileItem item = iter.next();
        String fieldName = item.getFieldName();  //取得表单控件的名称
    %>
   
    <ul><h4><%=fieldName %> ----><%=item.isFormField() %></h4>
    <%
       if(!item.isFormField())   //如果不是普通文件
       {
          File saveFile = null;
          InputStream  input = null;
          OutputStream output = null;
          input = item.getInputStream();
          output = new FileOutputStream(new File(this.getServletContext().getRealPath("/")+"upload"
          +File.separator+its.getIPTimeRand()+"."+item.getName().split("\\.")[1]));
          int temp = 0;
          byte data[] = new byte[512];
          while((temp=input.read(data,0,512))!=-1)
          {
            output.write(data);   //分块保存
          } 
          input.close();
          output.close();
       }else{
          
            String value= item.getString();
    %>
         <li> 普通参数:<%=value %>
   
    <%     
           }
     %>
        </ul>
     <%      
      }
    %>

//JSP多表单接收页面

  <%
       FileUploadTools   fut = new FileUploadTools(request, 3*1024*1024,this.getServletContext().getRealPath("/")+"upload");
       String name = fut.getParameter("uname");
       String inst[] = fut.getParameterValues("inst");
       List<String> all = fut.saveAll(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator);
    %>
    <h3>姓名:<%=name %></h3>
    <h3>兴趣:<%
              for(int x= 0;x<inst.length;x++){
             
             %>
               <%=inst[x] %>
             <% }
              %></h3>
     <%
        Iterator<String>   iter = all.iterator();
        while(iter.hasNext()){
       %>
       <img src="<%=request.getContextPath()%>/upload/<%=iter.next() %>">
       <%}
      %>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值