您的位置:首页 > 数据库

利用commons-fileupload组件上传文件至服务器和数据库

2009-12-27 16:47 477 查看
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<errorType.length;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+"<br>");

           }

           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);

 }

 

  }

}

下面是个html的上传页面:

<h1>文件上传演示</h1>

<form name="uploadform" method="POST" action="/upload" ENCTYPE="multipart/form-data">

        <table border="1" width="450" cellpadding="4" cellspacing="2" bordercolor="#9BD7FF">

        <tr><td width="100%" colspan="2">

                        文件1:<input name="x" size="40" type="file">

        </td></tr>

        <tr><td width="100%" colspan="2">

                        文件2:<input name="y" size="40" type="file">

        </td></tr>

        <tr><td width="100%" colspan="2">

                        文件3:<input name="z" size="40" type="file">

        </td></tr>

        </table>

        <br/><br/>

        <table>

        <tr><td align="center"><input name="upload" type="submit" value="开始上传"/></td></tr>

       </table>

</form>

现在介绍上传文件到服务器,下面只写出相关代码:

以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+"<br>");

           }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息