首页 > Web开发 > 详细

文件上传

时间:2015-09-29 14:38:12      阅读:264      评论:0      收藏:0      [点我收藏+]
  1 import javax.servlet.*;
  2 import javax.servlet.http.*;
  3 import java.io.*;
  4 import java.util.*;
  5 import java.util.regex.*;
  6 import org.apache.commons.fileupload.*;
  7 
  8 public class upload extends HttpServlet {
  9   private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
 10   //Process the HTTP Post request
 11   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 12     response.setContentType(CONTENT_TYPE);
 13     PrintWriter out=response.getWriter();
 14     try {
 15     DiskFileUpload fu = new DiskFileUpload();
 16  // 设置允许用户上传文件大小,单位:字节,这里设为2m
 17  fu.setSizeMax(2*1024*1024);
 18  // 设置最多只允许在内存中存储的数据,单位:字节
 19  fu.setSizeThreshold(4096);
 20  // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
 21  fu.setRepositoryPath("c://windows//temp");
 22  //开始读取上传信息
 23  List fileItems = fu.parseRequest(request);
 24  // 依次处理每个上传的文件
 25    Iterator iter = fileItems.iterator();
 26 
 27 //正则匹配,过滤路径取文件名
 28    String regExp=".+////(.+)$";
 29 
 30 //过滤掉的文件类型
 31 String[] errorType={".exe",".com",".cgi",".asp"};
 32    Pattern p = Pattern.compile(regExp);
 33      while (iter.hasNext()) {
 34        FileItem item = (FileItem)iter.next();
 35        //忽略其他不是文件域的所有表单信息
 36        if (!item.isFormField()) {
 37            String name = item.getName();
 38            long size = item.getSize();
 39            if((name==null||name.equals("")) && size==0)
 40                continue;
 41        Matcher m = p.matcher(name);
 42        boolean result = m.find();
 43        if (result){
 44            for (int temp=0;temp<ERRORTYPE.LENGTH;TEMP++){
 45            if (m.group(1).endsWith(errorType[temp])){
 46                  throw new IOException(name+": wrong type");
 47            }
 48            }
 49            try{
 50 
 51          //保存上传的文件到指定的目录
 52 
 53          //在下文中上传文件至数据库时,将对这里改写
 54            item.write(new File("d://" + m.group(1)));
 55 
 56            out.print(name+"  "+size+"");
 57            }
 58            catch(Exception e){
 59              out.println(e);
 60            }
 61 
 62         }
 63        else
 64        {
 65          throw new IOException("fail to upload");
 66        }
 67        }
 68    }
 69 }
 70  catch (IOException e){
 71    out.println(e);
 72  }
 73  catch (FileUploadException e){
 74       out.println(e);
 75  }
 76  
 77   }
 78 }
 79 
 80 现在介绍上传文件到服务器,下面只写出相关代码:
 81 
 82 以sql2000为例,表结构如下:
 83 
 84 字段名:name    filecode
 85 
 86 类型: varchar     image
 87 
 88 数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");
 89 
 90 代码如下:
 91 
 92 。。。。。。
 93 
 94       try{
 95         这段代码如果不去掉,将一同写入到服务器中
 96         //item.write(new File("d://" + m.group(1)));
 97              
 98         int byteread=0;
 99         //读取输入流,也就是上传的文件内容
100         InputStream inStream=item.getInputStream();              
101 pstmt.setString(1,m.group(1));
102         pstmt.setBinaryStream(2,inStream,(int)size);
103         pstmt.executeUpdate();
104         inStream.close();
105 
106         out.println(name+"  "+size+" ");
107         }

 

文件上传

原文:http://www.cnblogs.com/yangxu6069/p/4846095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!