jsp上傳文件到數據庫和從數據庫下載文件


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM