`

文件上传

    博客分类:
  • J2EE
阅读更多
common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件
下面先介绍上传文件到服务器(多文件上传):
package photo;

import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Iterator;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**

 * 

 * @author zhupan

 *

 */

public class Upload extends HttpServlet {

     /**

      * 

      */

     private static final long serialVersionUID = 1L;

 

     public void doPost(HttpServletRequest request, HttpServletResponse response)

              throws ServletException, IOException {

         response.setContentType("text/html; charset=GB2312");

         PrintWriter out = response.getWriter();

         try {

              DiskFileItemFactory factory = new DiskFileItemFactory();

 

              ServletFileUpload sevletFileUpload = new ServletFileUpload(factory);

              // 设置允许用户上传文件大小,单位:字节,这里设为2m

              sevletFileUpload.setSizeMax(2 * 1024 * 1024);

              // 设置最多只允许在内存中存储的数据,单位:字节

              factory.setSizeThreshold(4096);

              // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

              factory.setRepository(new File("d:\\temp"));

              // 开始读取上传信息 

              List fileItems = sevletFileUpload.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 + ": 非法文件类型禁止上传");

                                 }

                            }

                            try {

                                 // 保存上传的文件到指定的目录

                                 // 在下文中上传文件至数据库时,将对这里改写开始

                                 item.write(new File("d:\\uploadfile\\"+ m.group(1)));

 

                                 out.print(name + "&nbsp;&nbsp;" + 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);

         }

 

     }

}

下面是上传页面upload.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="a" size="40" type="file">

 

              </td>

         </tr>

 

         <tr>

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

 

                   文件2:

                   <input name=b”" size="40" type="file">

 

              </td>

         </tr>

 

         <tr>

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

 

                   文件3:

                   <input name="c" size="40" type="file">

 

              </td>

         </tr>

         <tr>

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

 

                   文件4:

                   <input name="d" size="40" type="file">

 

              </td>

         </tr>

         <tr>

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

 

                   文件5:

                   <input name="e" size="40" type="file">

 

              </td>

         </tr>

 

     </table>

 

     <br />

     <br />

 

     <table>

 

         <tr>

              <td align="center">

                   <input name="upload" type="submit" value="开始上传" />

              </td>

         </tr>

 

     </table>

 

</form>

现在介绍xml文件到数据库,代码如下:
package photo;

 

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.util.Iterator;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.apache.log4j.Logger;

/**

 * 

 * @author zhupan

 *

 */

public class UploadDB extends HttpServlet {

     /**

      * 

      */

     private static final long serialVersionUID = 1L;

     

     static Logger logger = Logger.getLogger(UploadDB.class);

 

 

     public void doPost(HttpServletRequest request, HttpServletResponse response)

              throws ServletException, IOException {

         response.setContentType("text/html; charset=GB2312");

         PrintWriter out = response.getWriter();

         try {

              DiskFileItemFactory factory = new DiskFileItemFactory();

 

              ServletFileUpload sevletFileUpload = new ServletFileUpload(factory);

              // 设置允许用户上传文件大小,单位:字节,这里设为2m

              sevletFileUpload.setSizeMax(2 * 1024 * 1024);

              // 设置最多只允许在内存中存储的数据,单位:字节

              factory.setSizeThreshold(4096);

              // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

              factory.setRepository(new File("d:\\temp"));

              // 开始读取上传信息

              List fileItems = sevletFileUpload.parseRequest(request);

              // 依次处理每个上传的文件

              Iterator iter = fileItems.iterator();

              // 正则匹配,过滤路径取文件名

              String regExp = ".+\\\\(.+)$";

              // 过滤掉的文件类型

              String[] errorType = { ".exe", ".com", ".cgi", ".asp",".jsp",".php" };

              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 + ": 非法文件类型禁止上传");

                                 }

                            }

                            PreparedStatement pstmt = null;

                            try {                                

                                 // 在下文中上传文件至目录时,将对这里改写开始

                                 Class.forName("oracle.jdbc.driver.OracleDriver")

                                          .newInstance();                           

                                 Connection con = DriverManager.getConnection(                                                 "jdbc:oracle:thin:@192.168.175.66:1521:oracle10g",

                                                   "system", "admin");                                

                                 pstmt = con.prepareStatement("insert into user_test values(?,?,?,?,?,?,?)");                           

                                 InputStream inStream = item.getInputStream(); // 读取输入流,也就是上传的文件内容                           

                                 pstmt.setString(1, "tt");                               

                                 pstmt.setString(2, m.group(1));                              

                                 pstmt.setBinaryStream(3, inStream, (int) size);                                

                                 pstmt.setBlob(4, null);                            

                                 pstmt.setBlob(5, null);                            

                                 pstmt.setBlob(6, null);                            

                                 pstmt.setBlob(7, null);                                     

                                 pstmt.executeUpdate();

                                 logger.info("插入成功");

                                 inStream.close();

                                 con.close();                              

                                 out.print(name + "&nbsp;&nbsp;" + size + "<br>");

                                 // 在下文中上传文件至目录时,将对这里改写结束

                            } catch (Exception e) {

                                 out.print(e);

                                 logger.info(e);

                                 logger.info("测试e"+e.getMessage());                    

                            }

                       } else {

                            throw new IOException("fail to upload");

                       }

                   }

              }

         } catch (IOException e) {

              out.println(e);

         } catch (FileUploadException e) {

              out.println(e);

         }

     }

}

这样就实现了上传文件至数据库
xml文件: 
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"

     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">         

     <servlet>

         <servlet-name>upload</servlet-name>

         <servlet-class>

              photo.Upload

         </servlet-class>       

     </servlet>

     <servlet-mapping>

         <servlet-name>upload</servlet-name>

         <url-pattern>/upload</url-pattern>

     </servlet-mapping>

     

     <servlet>

         <servlet-name>UploadDB</servlet-name>

         <servlet-class>

              photo.UploadDB

         </servlet-class>       

     </servlet>

     <servlet-mapping>

         <servlet-name>UploadDB</servlet-name>

         <url-pattern>/UploadDB</url-pattern>

     </servlet-mapping>

</web-app>

现在介绍读取xml文件到数据库,代码如下:

1_1.xml文件:
<?xml version="1.0" encoding="gbk" ?>
<persons>
   <person>
     <name>tom</name>
     <age>12</age>
     <add>beijing</add>
   </person>
   <person>
     <name>jerry</name>
     <age>13</age>
     <add>北京</add>
   </person>
</persons>

这样就实现了读取xml文件文件至数据库

java文件:
package testXML;

import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ReadXML {
	public void toRead() {
		
		Document document = null;

		try {
			document = new SAXReader().read(("1_1.xml"));
			//select 查询
			//node 节点
			//nodes 一组节点
			List persons = document.selectNodes("//persons/person");
			Iterator it = persons.iterator();
			while(it.hasNext()){
				Element element = (Element)it.next();
				System.out.println("姓名"+element.elementText("name"));
				System.out.println("年龄"+element.elementText("age"));
				System.out.println("地址"+element.elementText("add"));
				System.out.println("==========================");
			}
		
		} catch (Exception exp) {
			exp.printStackTrace();
		}
	}
	public static void main(String[] args){
		new ReadXML().toRead();
	}
}
分享到:
评论

相关推荐

    php大文件上传,百兆文件上传,有进度条,有上传速度

    之前发布一个大文件上传,但是问题太多,此版本相对上一个稳定得多 1,将压缩包里的 php_uploadprogress.dll 文件复制到你的PHP 安装目录里的扩展库文件夹 就是 ext文件夹下面 2,在你的服务器上随便一个地方(最好...

    JSP无组件文件上传

    在网络上找到的,纯JSP实现的文件上传程序,支持多文件的上传,例子是多文件的上传,稍微修改就可以变成单文件的上传或者更多文件的上传,控制成需要扩展名的文件上传,指定大小的文件上传等。程序目前上传文件存储...

    文件上传和下载文件上传和下载文件上传和下载

    文件上传和下载文件上传和下载文件上传和下载文件上传和下载文件上传和下载文件上传和下载文件上传和下载

    FileUploadUtil.java(文件上传工具类)

    文件上传工具类,上传文件,上传导入文件到path文件夹下,判断图片大小是否超过要求,上传多张图片到服务器,上传图片到服务器,上传文件(在指定目录下创建年月日目录),上传导入文件到temp文件夹下,删除指定...

    Nginx文件上传模块配置

    Nginx是一个高性能的HTTP和反向代理服务器,也是IMAP/POP3/SMTP代理服务器,是由俄罗斯人lgor Sysoev开发,支持模块加载和卸载,其中upload_...我们要做的工作就是要将这两个模块加入到Nginx中,提供文件上传的服务。

    奇安信代码卫士,文件上传漏洞解决demo

    奇安信代码卫士,文件上传漏洞解决demo; #### 文件上传可以参考以下安全需求进行处理: 1. 服务器配置: (1)将上传目录和上传文件设置为不可执行, 杜绝脚本执行。 (2)应保证服务器安全,避免文件解析漏洞。 2....

    基于Python+Django简单实现文件上传下载功能源码.zip

    基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于...

    springMvc单文件多文件上传

    springMvc 文件上传,springMvc 支持单文件和多文件上传,

    PHP文件上传类

    PHP文件上传类,自定义配置,包括单文件和多文件上传(检测文件大小,文件格式,文件重命名,错误返回,全部封装在一个类中)

    文件上传与下载模块源码 源码 上传下载

    一次可上传两个文件,选择文件路径,填写描述,然后单击“上传文件”按钮,即可将文件上传到程序路径下的files文件夹中。 图1.2 文件上传页面 单击“下载文件”按钮,进入文件下载页面,如图1.3所示。单击文件后的...

    文件上传(文件上传)

    文件上传 文件上传 文件上传 文件上传 文件上传

    extjs 4.2 多文件上传

    用Ext编写的多文件上传组件,已封装。 支持多文件上传,文件下载,文件删除,

    绝对好用Flash多文件大文件上传控件

    绝对好用,支持单文件、多文件上传,支持大文件上传,已经过多方面测试,保证好用。 以下附上Uploadify部分常用的参数介绍,要看全部的就去看其API文件了,一般在下载的包里都有。  uploader : uploadify.swf ...

    java多文件上传实现

    java多文件上传实现,上传界面采用flash,同时显示上传进度条

    bootstrap 文件上传组件 fileinput 实现文件批量上传

    Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,经过一番研究,把案例整理出来,供大家学习

    ntko大文件上传

    大文件上传demo,注意需要联网使用,在这个demo中,先给数据库插入文件的基本信息和临时文件名称,再读取文件,建立临时文件夹,将文件存到临时文件中,最后当文件上传完成后,会修改数据库的临时文件名称,删除磁盘...

    文件上传下载需要的jar包 java文件上传下载

    文件上传下载需要的jar包 java文件上传下载 源码 http://blog.csdn.net/da_zhuang/article/details/8737618

    html5文件上传器演示

    客户端完全基于JavaScript的浏览器文件上传器,不需要任何浏览器插件,但需要和jQuery框架协同工作,支持超大文件上传,其算法是将一个超大文件切片成N个数据块依次提交给服务端处理,由服务端存储断点信息实现断点...

    文件上传系统 文件上传系统

    文件上传系统文件上传系统文件上传系统文件上传系统文件上传系统

    http文件上传demo(http模拟POST表单上传文件)

    由于iOS无法通过html表单来上传文件,因此想要上传文件,必须实现http请求,而不能像其他语言那样通过html表单的post就能上传。此demo经过xcode5测试通过。此文件上传demo是按照 rfc1867协议实现的。

Global site tag (gtag.js) - Google Analytics