`
junier
  • 浏览: 76641 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

jsp上传文件到数据库和从数据库下载文件

    博客分类:
  • J2EE
阅读更多
这是从网上收集的。就是好像只能上传单个文件。
用了commons-fileupload-1.2.jar和commons-io-1.3.2.jar这两个包。

save.jsp

<%@ page language="java" contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.regex.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<title>保存上传文件</title>
</head>
<body bgcolor='#FFFFFF' text='#000000' leftmargin='0' topmargin='40' marginwidth='0' marginheight='0'>
<font size='6' color='blue'>文件列表:</font>
<center>
<table cellpadding=0 cellspacing=1 border=1 width='100%'>
<tr>
<td bgcolor=#008080>文件名</td>
<td bgcolor=#008080>大小</td>
</tr>

<%

// 连接字
String SQL_CON_DRIVER = "com.mysql.jdbc.Driver";
String SQL_CON_USERNAME = "root";
String SQL_CON_PASSWORD = "ddd";
String SQL_CON_STRING = "jdbc:mysql://localhost/ddd?useUniCode=true&characterEncoding=utf-8";


// 连接驱动
try{
  Class.forName(SQL_CON_DRIVER).newInstance();
}
catch(ClassNotFoundException e){
  out.print(e);
}

// 连接
Connection conn = DriverManager.getConnection(SQL_CON_STRING,SQL_CON_USERNAME,SQL_CON_PASSWORD);
ResultSet rs = null;


PreparedStatement pstmt=conn.prepareStatement("insert into require_file(file_name,file_content) values(?,?)");
%><%


int errorType_int =1;


    String msg = "";
    DiskFileUpload fu = new DiskFileUpload();
 
// 设置允许用户上传文件大小,单位:字节
//fu.setSizeMax(2*1024*1024);//2m

// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4096);


    // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
    //(临时存放目录,文件上传完毕后有办法清除它吗?)
   // fu.setRepositoryPath("D:\\TEMP");

 
    //开始读取上传信息
    List fileItems = fu.parseRequest(request);

   
   
    // 依次处理每个上传的文件
    Iterator iter = fileItems.iterator();

//正则匹配,过滤路径取文件名
String regExp=".+\\\\(.+)$";

//过滤掉的文件类型
String[] errorType={"exe","com","cgi","asp","jsp"};
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(size>=2*1024*1024){
  out.println("文件大小超过2M");
  break;
  }

        if((name==null||name.equals("")) && size==0||size>=2*1024*1024)
    {
  
    continue;//跳到while检查条件
  }
      
  

  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])){
                 out.println(name+": wrong type");
     errorType_int=0;

    //throw new IOException(name+": wrong type");
           }
           }
    // if(errorType_int!=0)
           try{

//PreparedStatement pstmt=conn.prepareStatement("insert into require_file(file_name,file_size,file_version,file_uploader,file_alter,file_content) values(?,?)");



////////////////////////////////////////////////////////////////////////////////////////////////////////    
          if(errorType_int!=0){
             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+"&nbsp;&nbsp;"+size+"<br>");
    errorType_int=1;
   }
////////////////////////////////////////////////////////////////////////////////////////////////////////

/*

//上传到目录

   if(errorType_int!=0){
             //item.write(new File("d:\\" + m.group(1)));

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

        //获取文件名字符串的长度
        int end = name.length();
     
        //返回在此字符串中最右边出现的指定子字符串的索引。
        int begin = name.lastIndexOf("\\");
     
        File savedFile = new File(fu.getRepositoryPath(), name.substring(begin+1,end));
        item.write(savedFile);


   out.println("<tr>");
   out.println("<td>" + name + "</td>");
   out.println("<td>" + size + "</td>");
   errorType_int=1;
   }
*/
           }
           catch(Exception e){
    // 回滚事务,如不需要可去掉
             try{conn.rollback ();} catch (java.sql.SQLException ignore){}
             out.println(e);
           }finally{}
  }
       else{
         throw new IOException("fail to upload");
       }


    }
}
if (pstmt != null) {
                   try { pstmt.close(); } catch (java.sql.SQLException ignore) {}
       }
    if (conn != null) {
                    try { conn.close(); } catch (java.sql.SQLException ignore) {}
     }
%></table>
<br><br>
<a href="index.html">返回上传页面</a>
</center>
</body>
</html>



down.jsp

<%@ page language="java" import="java.net.*" pageEncoding="utf-8"%><%@   page import="java.sql.*"%><%@   page import="java.util.*"%><%@   page import="java.text.*"%><%@   page import="java.io.*"%><%
   Class.forName("com.mysql.jdbc.Driver").newInstance();
   String url = "jdbc:mysql://localhost/ddd?user=root&password=&useUnicode=true&characterEncoding=utf-8";
   //其中mysql为你数据库的名字,user为你连接数据库的用户,password为你连接数据库用户的密码,可自己改   
   Connection conn = DriverManager.getConnection(url, "root", "ddd");
   ResultSet rs = null;
   int down_id=0;
   String down_id_string = request.getParameter("down_id");
    if(down_id_string==null){
out.println("没有你要下载的文件");
   }
  else{
   down_id=Integer.parseInt(down_id_string); //获得下载的文件id
   }
   String sql = "select file_name,file_content  from require_file  where id="+down_id+"";
   try {
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
   } catch (SQLException e) {
   }
   try {
    if (rs.next()) {

  response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(rs.getString("file_name"),"UTF-8")); 
  response.setHeader("Connection",  "close");
  response.setHeader("Content-Type",  "application/octet-stream"); 
  
     ServletOutputStream sout = response.getOutputStream();
  InputStream  in = rs.getBinaryStream("file_content");
  byte b[] = new byte[1024*8];
  for(int i=in.read(b);i!=-1;)
   {
      sout.write(b);
      i=in.read(b);
      }
     sout.flush();
     sout.close();
     in.close();
}

   } catch (Exception e) {
    System.out.println(e);
   }finally
     {
         if(rs != null)
         {
             rs.close();
         }

         if(stmt != null)
         {
             stmt.close();
         }
         if(conn != null)
         {
             conn.close();
         }
     }
  %>
分享到:
评论

相关推荐

    jsp+servlet文件上传数据库和下载

    在Java Web开发中,"jsp+servlet文件上传数据库和下载"是常见的功能需求,涉及到的主要技术包括JSP(JavaServer Pages)、Servlet、文件处理以及数据库操作。以下将详细阐述这些知识点。 1. JSP(JavaServer Pages...

    jsp文件上传到数据库里例子下载

    【标题】"jsp文件上传到数据库里例子下载"是一个典型的Java Web开发教程,它涉及到的主要知识点是如何使用JSP(JavaServer Pages)将用户上传的文件存储到数据库中。这一过程通常用于实现用户在网站上上传图片、文档...

    jsp+js+oracle 实现文件上传数据库,下载到本地

    例如,限制文件大小以防止DoS攻击,对文件名进行清理以防止路径遍历漏洞,以及使用缓存和分块传输优化大文件下载速度。 总结一下,"jsp+js+oracle 实现文件上传数据库,下载到本地"涉及到的关键技术包括: 1. JSP...

    用Jsp上传图片到数据库

    在IT行业中,JSP(JavaServer Pages)是一...总的来说,使用JSP上传图片到数据库涉及前端表单设计、后端文件上传处理、数据库操作以及必要的安全措施。理解并掌握这一过程对于开发涉及文件上传功能的Web应用至关重要。

    jsp上传图片到数据库

    总之,通过JSP和相关的Java库,我们可以实现一个用户友好的图片上传功能,将图片保存在服务器并将其数据存储到数据库中。这样的功能在很多Web应用中都很常见,如在线相册、社交网络等。理解并掌握这一过程对于任何...

    用jspSmart实现文件上传到数据库的实例

    通过以上步骤,我们成功地使用jspSmart库实现了文件上传到数据库的功能。这个实例对于初学者来说是一个很好的起点,帮助他们理解文件上传的原理以及如何在Java Web环境中处理文件。在实际项目中,可能还需要考虑性能...

    jsp 上传图片并保存到数据库里的servlet代码和jsp代码

    本主题将深入探讨如何使用JSP和Servlet来实现一个图片上传功能,并将图片数据存储到Oracle数据库中。 首先,我们需要理解JSP和Servlet的角色。JSP是用于创建动态内容的视图层技术,而Servlet则是Java编写的应用程序...

    JSP上传图片到数据库的例子

    在本文中,我们将探讨如何使用JSP(JavaServer Pages)来实现图片上传并存储到数据库的功能。首先,我们需要理解这个过程涉及的关键步骤:前端用户界面、后端处理以及数据库交互。 1. **前端用户界面**: - 用户...

    Jsp图片上传资料并将图片路径上传至数据库

    总结,实现"Jsp图片上传资料并将图片路径上传至数据库"的过程涉及前端表单设计、后端文件处理、数据库操作、异常管理和安全措施。通过合理的设计和编程,可以构建一个高效、安全的图片上传系统。

    jsp多文件上传到数据库.doc

    以上就是一个基本的多文件上传到数据库的实现流程,涵盖了数据库设计、前端页面创建、后端Action处理以及结果展示。在实际项目中,还需要考虑错误处理、文件大小限制、安全性等问题,以确保系统的稳定性和用户体验。

    jsp+jspsmartupload控件上传图片至数据库

    在本文中,我们将深入探讨如何使用JSP与jspsmartupload控件将图片上传到数据库。jspsmartupload是一款强大的JSP文件上传组件,能够帮助开发者处理用户通过表单提交的多个文件。以下是对这个技术栈的详细解析: 1. *...

    JSP实现将图片上传到数据库

    【JSP实现将图片上传到数据库】的知识点涵盖了图片上传的基本原理、文件上传组件的使用、JSP中处理图片数据的流程以及服务器端文件的存储形式。以下是详细说明: 1. **图片上传原理**: 图片上传是客户端通过Web...

    jsp 页面实现基础的登陆注册和分页 上传文件和下载文件 数据库使用 mysql 或者sqlserver

    jsp 数据连接池 mysql sqlserver 数据库都可以支持 分页 登陆 文件上传 下载 注意运行的时候 请将 Meta-inf下的context.xml文件复制一份到tomcat 的安装目录conf 下

    SSH文件上传保存到MySql数据库

    在上传文件并保存到数据库的过程中,Spring的依赖注入可以方便地将数据库连接池、DAO接口等资源注入到Action类中。 4. **Hibernate**:Hibernate作为ORM工具,用于简化与数据库的交互。在本例中,我们需要创建一个...

    jsp上传文档到数据库

    综上所述,将文件通过JSP上传到数据库涉及前端交互、文件处理、数据库操作以及安全性等多个方面。理解并掌握这些知识点,能够帮助你实现一个完整的文件上传系统。在实际项目中,还需要根据具体需求进行调整和优化。

    jsp利用数据库和磁盘进行文件上传

    3. 在保存文件到磁盘的同时,JSP将文件的相关信息(如文件名、文件大小、上传时间等)存储到数据库中。通常,我们会创建一个专门的表来存储这些元数据。 4. 当需要展示上传的文件时,前端发起一个新的请求,传递文件...

    jsp实现文件上传文档jsp实现文件上传文档

    * 能将文件上传到数据库中,也能将数据库中的数据下载下来。 3、jspSmartUpload类说明:jspSmartUpload File类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息...

    JSP多文件上传(同时上传)

    在多文件上传中,JSP页面会提交表单到一个Servlet,Servlet负责接收文件并进行处理。 3. **Multipart解析器**: 文件上传涉及到二进制数据,不能直接通过HTTP的普通请求来发送。因此,我们需要使用Multipart解析器...

    jsp实现excel上传至数据库,以及 从数据库导出excel

    在本项目中,JSP用于构建用户界面,接收用户上传的Excel文件,并处理从数据库导出的Excel文件下载请求。 2. Oracle:Oracle是流行的关系型数据库管理系统,广泛应用于企业级应用。在这里,它作为数据存储的平台,...

Global site tag (gtag.js) - Google Analytics