Unggah dan Unduh File JSP
Dalam contoh ini, kita akan belajar tentang mengupload dan mendownload file melalui JSP.
File Input output adalah operasi yang sangat penting. Di sini kita akan membaca dan menulis file menggunakan JSP.
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 mengupload 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
Baris Kode 12-18: Di sini kita membuat formulir dengan bidang file, yang akan mengunggah file ke server dan tindakan akan diteruskan ke action_file_upload.jsp
Action_file_upload.jsp
Baris Kode 20: Di sini kami memberikan jalur file ke jalur tertentu
Baris Kode 23-38: Di sini kita memeriksa apakah tipe kontennya multipart/form-data. Jika demikian, maka kontennya bertipe file, dan dibaca. Setelah file dibaca, file tersebut ditulis ke dalam file sementara dan kemudian file sementara tersebut dikonversi ke file utama.
Ketika Anda menjalankan kode di atas, Anda mendapatkan output berikut
Keluaran:
Kami mengunggah file menggunakan opsi tombol pilih file dan tombol unggah file akan mengunggah file ke server ke jalur yang disediakan.
Contoh: Menggunakan operasi JSP
Dalam contoh ini, kita akan mengunggah berkas menggunakan operasi JSP. Kita akan mengambil formulir yang memiliki tombol “unggah” dan saat Anda mengklik tombol unggah, berkas 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:
Baris Kode 11-12: Di sini kita mengambil formulir yang memiliki tindakan pada servlet guru_upload yang akan melewati metode POST. Selain itu, di sini kita mengenkripsi atribut ie yang menentukan bagaimana data formulir harus dikodekan dan dikirim ke server dan hanya digunakan dengan metode POST. Di sini kita menetapkan sebagai multipart/form-data yang ditujukan untuk file (karena datanya akan besar).
Baris Kode 13: Di sini kita menentukan elemen guru_file dengan tipe file dan memberikan ukuran 50.
Baris Kode 15: Ini adalah tombol tipe kirim dengan nama "Unggah" yang melaluinya servlet tindakan akan dipanggil dan permintaan akan diproses ke dalamnya dan 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:
Baris Kode 12-14: Di sini kita harus mengimpor perpustakaan org.apache.commons ke dalam konfigurasi kode. Kita harus mengimpor kelas fileupload dari perpustakaan org.apache.commons.
Baris Kode 23: Di sini kita memiliki metode doPost(), yang akan dipanggil saat kita meneruskan metode POST di JSP dan metode tersebut akan meminta dan merespons objek sebagai parameternya
Baris Kode 26: Di sini kita membuat objek kelas ServletFileUpload dari paket fileUpload dari perpustakaan org.apache.commons yang akan memeriksa apakah ada objek file di JSP. Jika ada yang ditemukan maka objek file tersebut akan diambil dari permintaan.
Baris Kode 27-32: Kita akan mengulangi jumlah file dengan memeriksa berapa banyak item file yang ada di objek multiparts yang merupakan objek daftar (jika kita mengunggah lebih dari satu file) dan menyimpannya ke folder c:/guru/upload dengan nama file yang telah disediakan . Kami menulis file menggunakan metode tulis objek file ke dalam folder yang telah disebutkan.
Baris Kode 34: Jika tidak ada pengecualian maka kami menetapkan atribut dalam permintaan sebagai gurumessage dengan nilai “File berhasil diunggah”.
Baris Kode 35-36: Jika pengecualian terjadi maka atur pesan bahwa "Unggahan file gagal"
Baris Kode 40: Jika file tidak ditemukan maka atur pesan sebagai "Tidak ada file ditemukan"
Baris Kode 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:
Baris Kode 10: Di sini kita mendapatkan atribut dari objek permintaan dengan nilai gurumessage menjadi objek string.
Kode Baris11: Di sini kami mencetak pesan itu.
Ketika kita menjalankan kode di atas kita mendapatkan output berikut
Keluaran:
Kami mendapatkan formulir dimana ada kolom untuk memilih file dari direktori. Setelah file dipilih maka kita harus mengklik tombol unggah.
Setelah tombol unggah diklik, kami mendapat pesan bahwa file berhasil diunggah.
Pada diagram di bawah ini kita dapat melihat bahwa file telah diunggah di 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:
Baris Kode 10: Di sini kami telah memberikan link untuk mendownload 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:
Baris Kode 3-5: Di sini kita mengimpor FileInputStream , IO Exception dan PrintWriter dari paket java.io.
Baris Kode 15: Kami mendefinisikan guru_download servlet yang memperluas HttpServlet.
Baris Kode 18: Seperti yang telah kita definisikan href, yang akan diapit dalam URL sehingga metode GET akan diproses (doGet akan dipanggil di servlet) yang juga menyertakan objek permintaan dan respons.
Baris Kode 19-20: Kami mengatur Tipe konten di objek respons dan juga mendapatkan objek penulis dari respons.
Baris Kode 21-22: Mendefinisikan variabel sebagai gurufile sebagai nilai test.txt dan gurupath sebagai c:/guru/upload/
Baris Kode 23-25: Kami mengatur tipe konten menggunakan objek respon dan kami menggunakan metode setHeader yang menetapkan header ke dalam objek respon sebagai nama file yang telah diunggah.
Baris Kode 27-28: Kami membuat FileInputStream di mana kami akan menambahkan gurupath+gurufile.
Baris Kode 31-33: Di sini kita telah mengambil a loop sementara yang akan dijalankan hingga file dibaca, maka kita berikan kondisi sebagai != -1. Pada kondisi ini kita menulis menggunakan printwriter object out.
Ketika Anda menjalankan kode di atas Anda akan mendapatkan output berikut
Keluaran:
Keluaran:
Kita harus mengklik download_1.jsp kita akan mendapatkan hyperlink sebagai "Unduh Di Sini". Ketika Anda mengklik file hyperlink ini, file tersebut akan diunduh ke sistem.
Ringkasan
- Kami telah belajar tentang formulir pendaftaran untuk mendaftar ke aplikasi apa pun
- Pelajari lebih lanjut tentang cara kerja formulir masuk dan keluar.
- Juga belajar tentang mengunggah dan mengunduh berkas melalui JSP.