Unggah dan Unduh File JSP
โก Ringkasan Cerdas
Pengunggahan dan pengunduhan berkas JSP adalah operasi input dan output inti yang memungkinkan aplikasi web menerima berkas dari pengguna dan menyajikan berkas kembali kepada mereka. Sumber daya ini menjelaskan kedua alur tersebut menggunakan formulir aksi JSP, Apache Commons FileUpload, dan kelas servlet, dengan kode kerja lengkap.

Unggah Berkas JSP
- Kita dapat mengunggah file apa pun menggunakan JSP.
- Ini bisa berupa file teks, file biner, file gambar atau dokumen lainnya.
- Di sini dalam hal pengunggahan file, hanya metode POST yang akan digunakan dan bukan metode GET.
- Atribut enctype harus disetel ke multipart/form-data.
Contoh: Menggunakan Aksi
Dalam contoh ini, kita mengunggah file menggunakan objek IO.
Aksi_file.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru File</title> </head> <body> <a>Guru File Upload:</a> Select file: <br /> <form action="action_file_upload.jsp" method="post" enctype="multipart/form-data"> <input type="file" name="file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html>
Action_file_upload.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.io.*,java.util.*, javax.servlet.*" %> <%@ page import="javax.servlet.http.*" %> <%@ page import="org.apache.commons.fileupload.*" %> <%@ page import="org.apache.commons.fileupload.disk.*" %> <%@ page import="org.apache.commons.fileupload.servlet.*" %> <%@ page import="org.apache.commons.io.output.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru File Upload</title> </head> <body> <% File file ; int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024; String filePath = "E:/guru99/data"; String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(maxMemSize); factory.setRepository(new File("c:\\temp")); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax( maxFileSize ); try{ List fileItems = upload.parseRequest(request); Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<body>"); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { String fieldName = fi.getFieldName(); String fileName = fi.getName(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); file = new File( filePath + "yourFileName") ; fi.write( file ) ; out.println("Uploaded Filename: " + filePath + fileName + "<br>"); } } out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex); } }else{ out.println("<html>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); } %> </body> </html>
Penjelasan kodenya:
Aksi_file.jsp
Code Baris 12-18: Di sini kita membuat formulir dengan kolom file, yang akan mengunggah file ke server, dan aksi tersebut akan diteruskan ke action_file_upload.jsp.
Action_file_upload.jsp
Code Baris 20: Di sini kita memberikan jalur file ke lokasi tertentu.
Code Baris 23-38: Di sini kita memeriksa apakah tipe kontennya adalah multipart/form-data. Jika demikian, maka kontennya berjenis file, dan kemudian dibaca. Setelah file dibaca, file tersebut ditulis ke dalam file sementara, dan kemudian file sementara tersebut dikonversi menjadi file utama.
Ketika Anda menjalankan kode di atas, Anda akan mendapatkan output berikut:
Keluaran:
Kami mengunggah file menggunakan opsi tombol pilih file, dan tombol unggah file akan mengunggah file ke server ke jalur yang telah diberikan.
Contoh: Menggunakan operasi JSP
Dalam contoh ini, kita akan mengunggah file menggunakan operasi JSP. Kita akan menggunakan sebuah formulir yang memiliki tombol "unggah", dan ketika Anda mengklik tombol unggah, file akan diunggah.
Mengunggah_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Uploading File</title> </head> <body> File: <br /> <form action="guru_upload" method="post" enctype="multipart/form-data"> <input type="file" name="guru_file" size="50" /> <br /> <input type="submit" value="Upload" /> </form> </body> </html>
Penjelasan kodenya:
Code Baris 11-12: Di sini kita menggunakan sebuah formulir yang memiliki aksi pada servlet guru_upload, yang akan melewati metode POST. Selain itu, di sini atribut enctype menentukan bagaimana data formulir harus dienkode dan dikirim ke server, dan hanya digunakan dengan metode POST. Di sini kita mengaturnya sebagai multipart/form-data, yang ditujukan untuk file (karena datanya akan berukuran besar).
Code Baris 13: Di sini kita menentukan elemen guru_file dengan tipe file dan memberikan ukuran 50.
Code Baris 15: Ini adalah tombol tipe submit dengan nama "Unggah", melalui tombol ini servlet aksi akan dipanggil dan permintaan akan diproses di dalamnya, serta file akan dibaca dan ditulis ke dalam servlet.
Guru_upload.java
package demotest; import java.io.File; import java.io.IOException; import java.util.List; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class guru_upload extends HttpServlet { private static final long serialVersionUID = 1L; public guru_upload() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(ServletFileUpload.isMultipartContent(request)){ try { List <FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for(FileItem item : multiparts){ if(!item.isFormField()){ String name = new File(item.getName()).getName(); item.write( new File("c:/guru/upload" + File.separator + name)); } } //File uploaded successfully request.setAttribute("gurumessage", "File Uploaded Successfully"); } catch (Exception ex) { request.setAttribute("gurumessage", "File Upload Failed due to " + ex); } }else{ request.setAttribute("gurumessage","No File found"); } request.getRequestDispatcher("/result.jsp").forward(request, response); } }
Penjelasan kodenya:
Code Baris 12-14: Di sini kita perlu mengimpor pustaka org.apache.commons ke dalam konfigurasi kode. Kita perlu mengimpor kelas fileupload dari pustaka org.apache.commons.
Code Baris 23: Di sini kita memiliki metode doPost(), yang akan dipanggil saat kita mengirimkan metode POST di JSP, dan metode ini akan menerima objek permintaan dan respons sebagai parameternya.
Code Baris 26: Di sini kita membuat objek dari kelas ServletFileUpload dari paket fileUpload di pustaka org.apache.commons, yang akan memeriksa apakah ada objek file di JSP. Jika ada yang ditemukan, maka objek file tersebut akan diambil dari permintaan.
Code Baris 27-32: Kita akan melakukan iterasi atas jumlah file dengan memeriksa berapa banyak item file yang ada dalam objek multiparts, yang merupakan objek daftar (jika kita mengunggah lebih dari satu file), dan menyimpannya ke dalam folder c:/guru/upload dengan nama file yang telah diberikan. Kita menulis file menggunakan metode write dari objek file ke dalam folder yang telah disebutkan.
Code Baris 34: Jika tidak ada pengecualian, maka kita akan menetapkan atribut dalam permintaan sebagai gurumessage dengan nilai โFile uploaded successfullyโ.
Code Baris 35-36: Jika terjadi pengecualian, maka kami akan menampilkan pesan "Unggahan file gagal".
Code Baris 40: Jika file tidak ditemukan, maka kami akan menampilkan pesan โFile tidak ditemukanโ.
Code Baris 42: Meneruskan permintaan menggunakan objek requestdispatcher ke result.jsp dengan objek permintaan dan respons.
Hasil.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Result</title> </head> <body> <% String msg = (String)request.getAttribute("message"); out.println(msg); %> </body> </html>
Penjelasan kodenya:
Code Baris 10: Di sini kita mengambil atribut dari objek permintaan dengan nilai gurumessage ke dalam objek string.
Code Baris 11: Di sini kami mencetak pesan itu.
Ketika kita mengeksekusi kode di atas, kita mendapatkan output berikut:
Keluaran:
Kita akan melihat sebuah formulir yang berisi kolom-kolom untuk memilih file dari direktori. Setelah file dipilih, kita harus mengklik tombol unggah.
Setelah tombol unggah diklik, kita akan mendapatkan pesan bahwa file telah berhasil diunggah.
Pada diagram di bawah ini, kita dapat melihat bahwa file tersebut telah diunggah ke folder c:/guru/upload.
Unduh Berkas JSP
Dalam contoh ini, kita akan mengunduh file dari direktori dengan mengklik tombol.
Mengunduh_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Downloading Guru Example</title> </head> <body> Guru Downloading File<a href="guru_download">Download here!!!</a> </body> </html>
Penjelasan kodenya:
Code Baris 10: Di sini kami telah memberikan tautan untuk mengunduh file dari folder c:/guru/upload menggunakan servlet guru_download.
Guru_download.java
package demotest; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class guru_download */ public class guru_download extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String gurufile = "test.txt"; String gurupath = "c:/guru/upload/"; response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=\"" + gurufile + "\""); FileInputStream fileInputStream = new FileInputStream(gurupath + gurufile); int i; while ((i = fileInputStream.read()) != -1) { out.write(i); } fileInputStream.close(); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Penjelasan kodenya:
Code Baris 3-5: Di sini kita mengimpor FileInputStream, IOException, dan Print.Writer dari paket java.io.
Code Baris 15: Kami sedang mendefinisikan guru_download servlet yang memperluas HttpServlet.
Code Baris 18: Seperti yang telah kita definisikan, sebuah href akan dikelilingi oleh URL, sehingga metode GET akan diproses (doGet akan dipanggil di servlet), yang juga menyertakan objek permintaan dan respons.
Code Baris 19-20: Kami menetapkan tipe konten dalam objek respons dan juga mendapatkan objek penulis dari respons tersebut.
Code Baris 21-22: Mendefinisikan variabel sebagai gurufile dengan nilai test.txt dan gurupath sebagai c:/guru/upload/.
Code Baris 23-25: Kami menetapkan tipe konten menggunakan objek respons, dan kami menggunakan metode setHeader, yang menetapkan header ke dalam objek respons sebagai nama file yang telah diunggah.
Code Baris 27-28: Kita membuat FileInputStream yang akan kita tambahkan gurupath+gurufile.
Code Baris 31-33: Di sini kita telah mengambil a loop sementara yang akan berjalan hingga file selesai dibaca, oleh karena itu kami memberikan kondisi != -1. Dalam kondisi ini, kita menulis menggunakan objek printwriter.
Saat Anda menjalankan kode di atas, Anda akan mendapatkan output berikut:
Keluaran:
Kita harus mengklik downloading_1.jsp, dan kita akan mendapatkan hyperlink bertuliskan โUnduh Di Siniโ. Saat Anda mengklik file hyperlink ini, file tersebut akan diunduh ke dalam sistem.





