本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接


Blog信息
blog名称:
日志总数:19
评论数量:31
留言数量:0
访问次数:142163
建立时间:2004年12月19日




利用commons-fileupload组件上传文件至服务器和数据库(ZT)
软件技术

gecko 发表于 2005/6/16 15:59:59

common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件 下面先介绍上传文件到服务器(多文件上传): import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import java.util.regex.*;import org.apache.commons.fileupload.*; public class upload 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 {    DiskFileUpload fu = new DiskFileUpload(); // 设置允许用户上传文件大小,单位:字节,这里设为2m fu.setSizeMax(2*1024*1024); // 设置最多只允许在内存中存储的数据,单位:字节 fu.setSizeThreshold(4096); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 fu.setRepositoryPath("c:\\windows\\temp"); //开始读取上传信息 List fileItems = fu.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           if (m.group(1).endsWith(errorType[temp])){                 throw new IOException(name+": wrong type");           }           }           try{ //保存上传的文件到指定的目录 //在下文中上传文件至数据库时,将对这里改写             item.write(new File("d:\\" + m.group(1)));            out.print(name+"  "+size+"");           }           catch(Exception e){             out.println(e);           }         }       else       {         throw new IOException("fail to upload");       }       }   }} catch (IOException e){   out.println(e); } catch (FileUploadException e){      out.println(e); }   }} 现在介绍上传文件到服务器,下面只写出相关代码: 以sql2000为例,表结构如下: 字段名:name    filecode 类型: varchar     image 数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)"); 代码如下: 。。。。。。            try{             //item.write(new File("d:\\" + m.group(1)));//这段代码如果不去掉,将一同写入到服务器中              int byteread=0;              InputStream inStream=item.getInputStream();  //读取输入流,也就是上传的文件内容             pstmt.setString(1,m.group(1));             pstmt.setBinaryStream(2,inStream,(int)size);             pstmt.executeUpdate();             inStream.close();              out.println(name+"  "+size+"");           } 。。。。。。 这样就实现了上传文件至数据库 感谢引自:http://java.mblogger.cn/zhangpoo/archive/06012005.aspx  


阅读全文(2656) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.528 second(s), page refreshed 144801217 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号