| « | November 2025 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 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
|
|
|