Membuat File Upload dan Download dengan JSP dan MySQL

Membuat File Upload dan Download dengan JSP dan MySQL

Pada tutorial jsp kali ini penulis akan membahas tentang bagaimana cara membuat file upload ke database tanpa harus meng-upload ke direktori harddisk, jadi file disimpan dalam database dalam bentuk blob. Dengan begini akan memudahkan kita dalam mengendalikan file tanpa harus pusing kehilangan data dari direktori harddisk, begitu data kita hapus dalam database maka akan terhapus juga filenya.

Setelah cara meng-upload penulis juga membahas cara untuk mendownload file yang tersimpan dalam database dan dapat anda kembangkan lagi misalkan anda ingin meng-upload foto dan ingin menampilkan bisa foto tersebut.

Buatlah sebuah project baru pada netbeans dengan nama terserah namun disini penulis membuat nama project dengan nama DocUpload. Setelah project tercipta maka selanjutnya pada folder source packages buatlah sebuah nama package, disini penulis menggunakan nama package dengan nama ghazali, dalam package ghazali nantinya berisi file koneksi ke database, Selanjutnya buat database baru pada mysql atau bisa memakai program database mysql seperti phpmyadmin atau mysql workbench, untuk sintaxnya seperti dibawah ini.

CREATE DATABASE IF NOT EXISTS `Jsp_Upload` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `Jsp_Upload`;

CREATE TABLE IF NOT EXISTS `documents` (
  `Doc_id` int(11) NOT NULL AUTO_INCREMENT,
  `FileName` varchar(100) NOT NULL,
  `type` varchar(20) NOT NULL,
  `upload_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `content` mediumblob NOT NULL,
  `upload_by` varchar(50) NOT NULL,
  PRIMARY KEY (`Doc_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

Selanjutnya buat file java class yang nantinya akan dibuat sebagai koneksi ke database mysql server, dengan file yang bernama terserah anda namun disini penulis menggunakan nama koneksi (koneksi.java). Untuk sintaxnya seperti dibawah ini.

package ghazali;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class koneksi {
    static Connection con;
    public static Connection getConnection()
    {
        try
        {            
            if(con==null)
            {
                Class.forName("com.mysql.jdbc.Driver");                    
                con= DriverManager.getConnection("jdbc:mysql://localhost:3306/Jsp_Upload?user=root&password=");          
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }        
        return con;
    }
    
    public static void CloseConnection()
    {
        if(con!=null)
        {
            try
            {
                con.close();
                con = null;
            }
            catch (SQLException ex)
            {
                ex.printStackTrace();
            }            
        }
        
    }
    
    public static ResultSet getResultFromSqlQuery(String SqlQueryString)
    {
        System.out.println("in funcation");
        ResultSet rs=null;
        if(con==null)
        {
            getConnection();
        }
        try
        {
            rs = con.createStatement().executeQuery(SqlQueryString);
        }
        catch (SQLException ex)
        {
            ex.printStackTrace();
        }             
        return rs;
    }
            
    
    public static void main(String args[])
    {
        getResultFromSqlQuery("select * from documents");
        CloseConnection();
        System.out.println("con done" + (con==null));                
    }
    
}

Buka file index.jsp dan isikan syntax dibawah ini. file index.jsp ini nantinya akan digunakan untuk meng-upload file atau tempat dimana terletak form upload atau data download file.

<%-- 
    Document   : index
    Created on : Feb 18, 2014, 5:30:38 PM
    Author     : ghazali
--%>

<%@page import="ghazali.koneksi"%>
<%@page import="java.sql.ResultSet"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
        <script>
            function verify()
            {
                if(document.getElementById('filename').value=="")
                {
                    alert('Please select the file');
                    return false;                
                }
                else
                {
                    return true;
                }
            }
        </script>
    </head>
    <body>
        <h2>Unggah File Dokumen</h2>
        <form enctype="multipart/form-data" action="unggah.jsp" onsubmit="return verify()" method="post">
            Pilih File <input type="file" name="filename" id="filename" accept=".txt, application/pdf, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword" />
            <input type="submit" value="Upload"/>
        </form>
        <br/>
        <table border="1" cellpadding="0" cellspacing="0" width="100%">
            <tr>
                <tr><th>File Name</th><th>Uploaded By</th><th>File Type</th><th>Upload Time</th><th>Action</th></tr>
            <%
                ResultSet rs = koneksi.getResultFromSqlQuery("select doc_id,filename,type, upload_time, upload_by from documents");
                int count =0;
                while(rs.next())
                {
                   out.println("<tr>"
                           + "<td>"+rs.getString(2)+"</td>"
                           + "<td>"+rs.getString(5)+"</td>"
                           + "<td>"+rs.getString(3)+"</td>"
                           + "<td>"+rs.getString(4)+"</td>"
                           + "<td><a href='unduh.jsp?Doc_id="+rs.getInt(1) +"'> Download </a></td>"                                                      
                           + "</tr>");
                   count++;
                }
                rs.close();
                koneksi.CloseConnection();
                if(count==0)
                {
                    out.println("<tr><td colspan='4'> No File Found..!! </td></tr>");
                }
            %>        
            </tr>
        </table>
    </body>
</html>

Selanjutnya buatlah file dengan nama unggah.jsp (upload file) dan unduh.jsp (download file) untuk proses upload dan proses dimana akan digunakan untuk memproses data baik dari sisi upload dan download, dan file file ini juga bertindak apakah file berhasil di upload atau tidak, untuk syntaxnya seperti dibawah ini.

unggah.jsp

<%-- 
    Document   : unggah
    Created on : Feb 18, 2014, 5:42:39 PM
    Author     : ghazali
--%>

<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="java.util.Enumeration"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.io.File"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.InputStream"%>
<%@page import="ghazali.koneksi"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        upload file page...!!!
        <%
            String rtempfile = File.createTempFile("temp","1").getParent();            
            MultipartRequest multi = new MultipartRequest(request,rtempfile, 15*1024*1024);     // maximum size 15 MB
            
            Enumeration files = multi.getFileNames();
            

            String st="insert into documents(filename, type,content, upload_by) values (?,?,?,?)";
            PreparedStatement psmt=koneksi.getConnection().prepareStatement(st);
            
                        
            String name="";
            String fileExtesion="";
            File ff =null;
            FileInputStream fin =null;
            
            while (files.hasMoreElements())
            {
                    name=(String)files.nextElement();                                        
                    ff = multi.getFile(name);
                    fileExtesion = ff.getName().substring(ff.getName().lastIndexOf("."));
                    
                    boolean fileAllowed = fileExtesion.equalsIgnoreCase(".txt")||
                                          fileExtesion.equalsIgnoreCase(".pdf")||
                                          fileExtesion.equalsIgnoreCase(".doc")||
                                          fileExtesion.equalsIgnoreCase(".docx")||
                                          fileExtesion.equalsIgnoreCase(".xls")||
                                          fileExtesion.equalsIgnoreCase(".xlsx");
                    
                    if((ff!=null)&&fileAllowed)
                    {

                            try
                            {
                                    fin=new FileInputStream(ff);
                                    psmt.setString(1, ff.getName());
                                    psmt.setString(2, fileExtesion);
                                    psmt.setBinaryStream(3,(InputStream)fin, (int)(ff.length()));
                                    psmt.setString(4, "Logged User name or ID");        // pass the user name or id 
                                    boolean sss = psmt.execute();
                                    
                                    out.print("uploaded successfully..");
                                    out.print("<br/> Go to page");
                            }

                            catch(Exception e)
                            {
                                    out.print("Failed due to " + e);
                            }

                            finally
                            {
                            // next statement is must otherwise file will not be deleted from the temp as fin using f.
                             // its necessary to put outside otherwise at the time of exception file will not be closed.
                                    fin.close();
                                    ff.delete();
                            }
                    }
                    else
                    {
                           out.print("Please select the correct file...");
                    }// end of if and else
            }// end of while
                                   
            koneksi.CloseConnection();            
        %>
        <a href="index.jsp">Home Page</a>
    </body>
</html>

unduh.jsp

<%-- 
    Document   : unduh
    Created on : Feb 18, 2014, 5:45:12 PM
    Author     : ghazali
--%>

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Blob"%>
<%@page import="java.io.OutputStream"%>
<%@page import="ghazali.koneksi"%>
<%
    String doc_id = request.getParameter("Doc_id");     
    ResultSet rs = koneksi.getResultFromSqlQuery("select FileName, type, content from documents where Doc_id = " + doc_id);
    rs.next();
    
    response.reset();
                             
    if(rs.getString(2)==".txt")
    {
        response.setContentType("application/octet-stream");
    }
    else if(rs.getString(2)==".pdf")
    {
        response.setContentType("application/pdf");
    }
    else if((rs.getString(2)==".doc")||rs.getString(2)==".docx")
    {
        response.setContentType("application/msword");
    }
    else if((rs.getString(2)==".xls")||(rs.getString(2)==".xlsx"))
    {
        response.setContentType("application/vnd.ms-excel");
    }
    response.addHeader("Content-Disposition","attachment; filename="+rs.getString(1));
    Blob blb = rs.getBlob(3);
    byte[] bdata = blb.getBytes(1, (int) blb.length());
    
    OutputStream output =  response.getOutputStream();
    output.write(bdata);
    output.close();
              
    rs.close();
    koneksi.CloseConnection(); 
%>

Sekian tutorial kali ini kalau ada kesalahan penulis minta pengunjung untuk mengkritik pedas, untuk hasil akhirnya anda bisa lihat gambar yang dibawah ini.

uploadjsp

Download Source Code

Tags: , , , ,