Rabu, 15 Agustus 2012

Upload File Image pada JSP Tanpa Library Tambahan (Pemrograman Web Java Server Page / JSP)

Pada pemrograman PHP dan ASP untuk mengupload File Image, Gambar, Dokumen dapat dilakukan dengan mudah, tetapi bagaimana dengan JSP, ternyata tidak semudah itu. Setelah beberapa tahun menyimpan pertanyaan ini, dan karena kebutuhan mendesak setelah beberapa hari memaksakan diri mencari akhirnya dapatlah cara untuk Mengupload File secara sederhana tanpa library tambahan pada Web JSP :)

Buatlah direktori web, misal testupload. Kemudian di dalamnya buatlah file index.jsp dengan isi sebagai berikut :

<%@ page language="java" %>
<HTml>
<HEAD><TITLE>Halaman untuk pilih file yang akan diupload</TITLE></HEAD>  
<%  // http://cariprogram.blogspot.com
// nuramijaya@gmail.com
// sumber : http://www.roseindia.net/jsp/file_upload/Sinle_upload.xhtml.shtml  
//jangan lupa menggunakan Encrypt type of multipart/form-data and input of file type untuk browse dan submit file %>
  <BODY> <FORM  ENCTYPE="multipart/form-data" ACTION="upload.jsp" METHOD=POST>
<br><br><br>
 <center><table border="2" >
                    <tr><center><td colspan="2"><p align="center"><B>UPLOAD FILE</B><center></td></tr>
                    <tr><td><b>Silakan pilih File untuk Diupload:</b></td>
                    <td><INPUT NAME="F1" TYPE="file"></td></tr>
<tr><td colspan="2"><p align="right"><INPUT TYPE="submit" VALUE="Send File" ></p></td></tr>
             <table>
     </center>      
     </FORM>
</BODY>
</HTML>

Setelah itu buatlah file upload.jsp dengan isi sebagai berikut :



<%@ page import="java.io.*" %>
<%
    // http://cariprogram.blogspot.com
// nuramijaya@gmail.com
// sumber : http://www.roseindia.net/jsp/file_upload/Sinle_upload.xhtml.shtml
//mengambil isi informasi JSP Request Header
String contentType = request.getContentType();
//mengecek bahwa file sudah dipilih
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
  DataInputStream in = new DataInputStream(request.getInputStream());
//mengambil panjang data
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
//this loop converting the uploaded file into byte code
while (totalBytesRead < formDataLength) {
byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
totalBytesRead += byteRead;
}

String file = new String(dataBytes);
//untuk mengambil nama file asli
String saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1,contentType.length());
int pos;
//mengestrak index file
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;

// membuat file dengan nama sama dan mengisi dengan isi content
//FileOutputStream fileOut = new FileOutputStream(saveFile);
FileOutputStream fileOut = new FileOutputStream(application.getRealPath("/testupload/images") + "/" + saveFile);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();

%><Br><table border="2"><tr><td><b>Berhasil Mengupload File:</b>
<% out.println(saveFile); %></td></tr></table> <%
}
%>


Hasilnya, jalankan file index.php, misal pada Apache Tomcat 70.27 bawaan NetBeans 7.2 dengan url http://localhost:8084/testupload/index.jsp.


Kemudian pilihlah file yang akan diupload, kemudian klik Send File, hasilnya :


File sudah masuk ke direktori testupload/images. Program ini penulis tes untuk file yang cukup besar di atas 5MB dan berbagai jenis file, *.jpg, *.mp3, *.zip, *.pdf berjalan dengan baik.

Folder Project Web dapat didownload disini. Di Google Docs klik File - Download.

Semoga berguna.