JSP फ़ाइल अपलोड और डाउनलोड

इस उदाहरण में, हम JSP के माध्यम से फ़ाइल अपलोड और डाउनलोड करने के बारे में सीखेंगे।

फ़ाइल इनपुट आउटपुट बहुत महत्वपूर्ण ऑपरेशन हैं। यहाँ हम JSP का उपयोग करके फ़ाइल को पढ़ने और लिखने जा रहे हैं।

JSP फ़ाइल अपलोड

  • हम JSP का उपयोग करके कोई भी फाइल अपलोड कर सकते हैं।
  • यह एक टेक्स्ट फ़ाइल, बाइनरी फ़ाइल, इमेज फ़ाइल या कोई अन्य दस्तावेज़ हो सकता है।
  • यहां फ़ाइल अपलोडिंग के मामले में, केवल POST विधि का उपयोग किया जाएगा, GET विधि का नहीं।
  • Enctype विशेषता को मल्टीपार्ट/फॉर्म-डेटा पर सेट किया जाना चाहिए।

उदाहरण: एक्शन का उपयोग करना

इस उदाहरण में, हम IO ऑब्जेक्ट का उपयोग करके एक फ़ाइल अपलोड कर रहे हैं

एक्शन_फ़ाइल.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>

एक्शन_फ़ाइल_अपलोड.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>

कोड का स्पष्टीकरण:

एक्शन_फ़ाइल.jsp

कोड लाइन 12-18: यहां हम फ़ाइल फ़ील्ड के साथ फ़ॉर्म बना रहे हैं, जो सर्वर पर फ़ाइल अपलोड करेगा और कार्रवाई action_file_upload.jsp को पास कर दी जाएगी

एक्शन_फ़ाइल_अपलोड.jsp

कोड लाइन 20: यहाँ हम फ़ाइल का पथ एक विशेष पथ पर दे रहे हैं

कोड लाइन 23-38: यहाँ हम जाँचते हैं कि क्या सामग्री का प्रकार मल्टीपार्ट/फ़ॉर्म-डेटा है। अगर ऐसा है, तो सामग्री फ़ाइल प्रकार की है, और इसे पढ़ा जाता है। फ़ाइल को पढ़ने के बाद, इसे अस्थायी फ़ाइल में लिखा जाता है और फिर अस्थायी फ़ाइल मुख्य फ़ाइल में परिवर्तित हो जाती है।

जब आप उपरोक्त कोड निष्पादित करते हैं, तो आपको निम्नलिखित आउटपुट मिलता है

JSP फ़ाइल अपलोड

आउटपुट:

हम फ़ाइल चुनें बटन विकल्प का उपयोग करके फ़ाइल अपलोड कर रहे हैं और फ़ाइल अपलोड बटन फ़ाइल को दिए गए पथ पर सर्वर पर अपलोड कर देगा।

उदाहरण: JSP संचालन का उपयोग करना

इस उदाहरण में, हम JSP ऑपरेशन का उपयोग करके एक फ़ाइल अपलोड करने जा रहे हैं। हम एक फॉर्म लेंगे जिसमें “अपलोड” बटन होगा और जब आप अपलोड बटन पर क्लिक करेंगे तो फ़ाइल अपलोड हो जाएगी।

अपलोडिंग_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>

कोड का स्पष्टीकरण:

कोड लाइन 11-12: यहाँ हम एक ऐसा फॉर्म ले रहे हैं जिसमें सर्वलेट गुरु_अपलोड पर कार्रवाई है जो एक विधि POST से होकर गुजरेगी। साथ ही, यहाँ हम enctype यानी विशेषता देते हैं जो निर्दिष्ट करती है कि फॉर्म डेटा को कैसे एनकोड किया जाना चाहिए और सर्वर पर कैसे भेजा जाना चाहिए और इसका उपयोग केवल POST विधि के साथ किया जाता है। यहाँ हम multipart/form-data के रूप में सेट कर रहे हैं जो फ़ाइल के लिए है (क्योंकि डेटा बड़ा होगा)।

कोड लाइन 13: यहां हम guru_file तत्व को फ़ाइल प्रकार के साथ निर्दिष्ट कर रहे हैं और आकार 50 दे रहे हैं।

कोड लाइन 15: यह एक सबमिट प्रकार का बटन है जिसका नाम "अपलोड" है जिसके माध्यम से एक्शन सर्वलेट को कॉल किया जाएगा और उसमें अनुरोध संसाधित किया जाएगा और फ़ाइल को सर्वलेट में पढ़ा और लिखा जाएगा।

गुरु_अपलोड.जावा

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);
		
		    }


}

कोड का स्पष्टीकरण:

कोड लाइन 12-14: यहाँ हमें कोड के कॉन्फ़िगरेशन में org.apache.commons लाइब्रेरी को आयात करना होगा। हमें org.apache.commons लाइब्रेरी से fileupload क्लास को आयात करना होगा।

कोड लाइन 23: यहां हमारे पास doPost() विधि है, जिसे तब बुलाया जाएगा जब हम JSP में POST विधि पास कर रहे होंगे और यह अपने पैरामीटर के रूप में ऑब्जेक्ट का अनुरोध और प्रतिक्रिया करेगा

कोड लाइन 26: यहाँ हम org.apache.commons लाइब्रेरी से fileUpload पैकेज से ServletFileUpload क्लास का एक ऑब्जेक्ट बना रहे हैं जो जाँच करेगा कि JSP में कोई फ़ाइल ऑब्जेक्ट है या नहीं। अगर कोई पाया जाता है तो उन फ़ाइल ऑब्जेक्ट को अनुरोध से लिया जाएगा।

कोड लाइन 27-32: हम मल्टीपार्ट्स ऑब्जेक्ट में कितने फ़ाइल आइटम मौजूद हैं, इसकी जाँच करके फ़ाइलों की संख्या को दोहराएँगे, जो एक सूची ऑब्जेक्ट है (यदि हम एक से अधिक फ़ाइल अपलोड करते हैं) और इसे c:/guru/upload फ़ोल्डर में दिए गए फ़ाइल नाम के साथ सेव करेंगे। हम फ़ाइल को फ़ाइलऑब्जेक्ट की write विधि का उपयोग करके उस फ़ोल्डर में लिख रहे हैं जिसका उल्लेख किया गया है।

कोड लाइन 34: यदि कोई अपवाद नहीं है तो हम अनुरोध में विशेषता को गुरुमेसेज के रूप में "फ़ाइल सफलतापूर्वक अपलोड की गई" मान के साथ सेट कर रहे हैं।

कोड लाइन 35-36: यदि अपवाद होता है तो सेटिंग संदेश कि “फ़ाइल अपलोड विफल”

कोड लाइन 40: यदि फ़ाइल नहीं मिली तो सेटिंग संदेश "कोई फ़ाइल नहीं मिली"

कोड लाइन 42: अनुरोध और प्रतिक्रिया ऑब्जेक्ट के साथ result.jsp पर requestdispatcher ऑब्जेक्ट का उपयोग करके अनुरोध अग्रेषित करना।

परिणाम.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>

कोड का स्पष्टीकरण:

कोड लाइन 10: यहां हम अनुरोध ऑब्जेक्ट से gurumessage मान के साथ विशेषता को एक स्ट्रिंग ऑब्जेक्ट में प्राप्त कर रहे हैं।

कोड लाइन 11: यहां हम वह संदेश छाप रहे हैं।

जब हम उपरोक्त कोड निष्पादित करते हैं तो हमें निम्नलिखित आउटपुट मिलता है

आउटपुट:

हमें एक फॉर्म मिलता है जिसमें डायरेक्टरी से फ़ाइल चुनने के लिए फ़ील्ड होते हैं। एक बार फ़ाइल चुनने के बाद हमें अपलोड बटन पर क्लिक करना होता है।

JSP संचालन का उपयोग करके फ़ाइल अपलोड करें

अपलोड बटन पर क्लिक करने पर हमें संदेश प्राप्त होता है कि फ़ाइल सफलतापूर्वक अपलोड हो गई है।

JSP संचालन का उपयोग करके फ़ाइल अपलोड करें

नीचे दिए गए चित्र में हम देख सकते हैं कि फ़ाइल c:/guru/upload फ़ोल्डर में अपलोड की गई थी।

JSP संचालन का उपयोग करके फ़ाइल अपलोड करें

JSP फ़ाइल डाउनलोड

इस उदाहरण में, हम बटन पर क्लिक करके एक निर्देशिका से एक फ़ाइल डाउनलोड करने जा रहे हैं।

डाउनलोड_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>

कोड का स्पष्टीकरण:

कोड लाइन 10: यहां हमने सर्वलेट guru_download का उपयोग करके फ़ोल्डर c:/guru/upload से फ़ाइल डाउनलोड करने के लिए लिंक दिया है।

गुरु_डाउनलोड.जावा

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
	}

}

कोड का स्पष्टीकरण:

कोड लाइन 3-5: यहां हम java.io पैकेज से FileInputStream, IO Exception और PrintWriter आयात कर रहे हैं।

कोड लाइन 15: हम guru_download को परिभाषित कर रहे हैं सर्वलेट जो HttpServlet का विस्तार करता है.

कोड लाइन 18: जैसा कि हमने एक href परिभाषित किया है, जो URL में संलग्न होगा, इसलिए GET विधि संसाधित हो जाएगी (doGet को सर्वलेट में बुलाया जाएगा) जो अनुरोध और प्रतिक्रिया ऑब्जेक्ट को भी संलग्न करता है।

कोड लाइन 19-20: हम प्रतिक्रिया ऑब्जेक्ट में सामग्री प्रकार सेट कर रहे हैं और प्रतिक्रिया से लेखक ऑब्जेक्ट भी प्राप्त कर रहे हैं।

कोड लाइन 21-22: गुरुफाइल को test.txt मान के रूप में तथा गुरुपथ को c:/guru/upload/ के रूप में एक चर को परिभाषित करना

कोड लाइन 23-25: हम प्रतिक्रिया ऑब्जेक्ट का उपयोग करके सामग्री प्रकार सेट कर रहे हैं और हम setHeader विधि का उपयोग करते हैं जो अपलोड किए गए फ़ाइल नाम के रूप में प्रतिक्रिया ऑब्जेक्ट में हेडर सेट करता है।

कोड लाइन 27-28: हम FileInputStream बना रहे हैं जिसमें हम gurupath+gurufile जोड़ेंगे।

कोड लाइन 31-33: यहाँ हमने एक घुमाव के दौरान जो फ़ाइल पढ़े जाने तक चलेगा, इसलिए हमने शर्त != -1 रखी है। इस शर्त में हम प्रिंटराइटर ऑब्जेक्ट का उपयोग करके आउट लिख रहे हैं।

जब आप उपरोक्त कोड निष्पादित करेंगे तो आपको निम्नलिखित आउटपुट मिलेगा

आउटपुट:

फ़ाइल डाउनलोड हो रही है

आउटपुट:

हमें downloading_1.jsp पर क्लिक करना है, हमें “Download Here” जैसा एक हाइपरलिंक मिलेगा। जब आप इस हाइपरलिंक फ़ाइल पर क्लिक करेंगे, तो यह सिस्टम में डाउनलोड हो जाएगी।

सारांश

  • हमने किसी भी एप्लीकेशन में पंजीकरण करने के लिए पंजीकरण फॉर्म के बारे में सीखा है
  • लॉग इन और लॉग आउट फॉर्म कैसे काम करता है, इसके बारे में अधिक जानकारी प्राप्त की।
  • जेएसपी के माध्यम से फ़ाइल अपलोड करने और डाउनलोड करने के बारे में भी सीखा।