用了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();
         }
     }
  %>

转载于:https://www.cnblogs.com/fan-xiaofan/p/5818520.html

jsp上传文件到数据库和从数据库下载文件相关推荐

  1. ftp上传文件服务器报550错误_java ftp下载文件,Java 实现ftp上传下载文件

    最近项目中需要实现将文件先存放到ftp上,需要的时候再从ftp上下载,做的过程中碰到了问题,发现中文文件名的无法上传到ftp上,ftp上的中文文件名的文件下载不下来,几番折腾,终于搞定了,记录一下备忘 ...

  2. java struts2 excel上传_文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术...

    文件上传方法,使用Struts2,实现Excel文件读取并写入数据库技术 如题:文件信息的批量导入-- 项目中经常会遇到客户的一些单表信息的数据批量导入,也就是提供定制Excel表,再把Excel表中 ...

  3. 利用apache-commons-fileupload写jsp上传文件

    利用apache-commons-fileupload写jsp上传文件 需要下载fileupload和beanutils两个包,代码如下. <%@ page language="jav ...

  4. 自动备份网站和数据库打包并上传FTP服务器并删除前30天文件

    自动备份网站和数据库打包并上传FTP服务器并删除前30天文件 @echo off<nul 3>nul Set nowdate=%date:~0,10% set nowdate=%nowda ...

  5. JSP上传文件失败的问题 未解决

    服务器操作系统:CentOS 7.3 64位 本机:win10上使用WinSCP远程传输文件,使用putty远程执行命令 已经完成的步骤: Tomcat启动 下图,成功启动 后台 Servlet 编写 ...

  6. laravel-admin / Dcat admin 上传Excel并导入数据到数据库

    准备工作 安装maatwebsite/excel composer require maatwebsite/excel laravel-admin 效果图 创建按钮 $grid->tools(f ...

  7. Jsp挖掘(7)-JSP上传漏洞

    JSP上传漏洞 一.上传漏洞成因 文件上传过程中,通常因为未校验上传文件后缀类型,导致用户可上传jsp等一些webshell文件.代码审计时可重点关注对上传文件类型是否有足够安全的校验,以及是否限制文 ...

  8. python视频下载自动提取视频封面,上传七牛云并写入Mysql数据库(一)

    有时候需要下载一些视频上传到数据库,网上很多抓取的方式用起来都不是很方便,自己写了一个能够用的抓取视频的脚本,并且自动提取视频封面,上传到七牛云,最后按照规则写到数据库.大大提高了工作效率. pip需 ...

  9. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  10. php文件上传格式限制,如何在PHP中限制文件上传类型的文件大小?

    我有一个上传表单,正在检查文件大小和文件类型,以将上传的文件限制为2 MB,以及.pdf,.jpg,.gif或.png文件类型.我的目标是在用户违反这些规则之一的情况下向他们显示警报消息. 有四种方案 ...

最新文章

  1. 只需3kbps就能清晰通话,这个谷歌音频工具开源了!
  2. 空间滤波器是怎么来的
  3. Centos 7 docker 拉取镜像慢
  4. OpenCV Mat基础认知感
  5. 系统学习深度学习(八)--损失函数
  6. Python成员运算符
  7. 大年初一连夜带娃改bug:CTO把代码写成这鬼样子,被害惨了!
  8. 网页设计(二)——HTML与BOX
  9. WPF+prism框架实战源码和展示
  10. python中if brthon环境安装包_python-debian/test.deb.uu at master · romlok/python-debian · GitHub...
  11. 宋宝华Linux培训笔记-Linux多进程
  12. 熊猫学猿--sql查询
  13. 金融计量模型(十):协整和误差修正模型
  14. basler恢复出厂设置_bios恢复出厂设置
  15. Easy Mobile插件之Advertising
  16. 遥感影像地图编制流程
  17. 徐州市纳西科技贸易有限公司 拖欠工资 李东来
  18. 苹果拍照怎么显示地点和时间_手机拍照自带功能,照片上能添加时间和地点?一键按下搞定...
  19. 关于apk安全检测的第三方在线网站
  20. 使用C语言完成---温度转换表

热门文章

  1. Nginx源码分析 - 主流程篇 - 模块的初始化(12)
  2. 04 . Filebeat简介原理及配置文件和一些案例
  3. tidb mysql主从复制_如何配置MySQL数据库主从复制
  4. 正则表达式 两个符号的字段_Tableau正则提取字段部分内容
  5. 一个简单的txt读取与导出
  6. [渝粤教育] 西南科技大学 材料力学 在线考试复习资料
  7. 将自己电脑的SSH key添加到GitHub上
  8. OUTLOOK新邮件到达提醒设置以及outlook最小化到托盘设置
  9. NIO的epoll空轮询bug
  10. 18-10-29 关于设计器机器人等安装遇到的问题的解决方法