Nahrávanie súborov JSP & Príklady programov na stiahnutie súborov

Obsah:

Anonim

V tomto príklade sa dozvieme o nahrávaní a sťahovaní súboru prostredníctvom JSP.

Výstup súboru je veľmi dôležitá operácia. Tu budeme čítať a písať súbory pomocou JSP.

Nahranie súboru JSP

  • Pomocou JSP môžeme nahrať akékoľvek súbory.
  • Môže to byť textový súbor, binárny súbor, obrazový súbor alebo akýkoľvek iný dokument.
  • Tu sa v prípade nahrávania súborov použije iba metóda POST, a nie metóda GET.
  • Atribút Enctype by mal byť nastavený na multipart / form-data.

Príklad: Použitie akcie

V tomto príklade nahrávame súbor pomocou objektu IO

Action_file.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Guru súbor  Nahrávanie súborov Guru: Vyberte súbor:

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. *"%> Nahrávanie súborov Guru <%Spisový spis;int maxFileSize = 5000 * 1024;int maxMemSize = 5000 * 1024;Reťazec filePath = "E: / guru99 / data";Reťazec contentType = request.getContentType ();if ((contentType.indexOf ("multipart / form-data")> = 0)) {DiskFileItemFactory factory = nový DiskFileItemFactory ();factory.setSizeThreshold (maxMemSize);factory.setRepository (nový súbor ("c: \\ temp"));ServletFileUpload upload = nový ServletFileUpload (továreň);upload.setSizeMax (maxFileSize);skúsiť {Zoznam fileItems = upload.parseRequest (požiadavka);Iterátor i = fileItems.iterator ();out.println ("");out.println ("");while (i.hasNext ()){FileItem fi = (FileItem) i.next ();if (! fi.isFormField ()) {Reťazec fieldName = fi.getFieldName ();Reťazec fileName = fi.getName ();boolean isInMemory = fi.isInMemory ();long sizeInBytes = fi.getSize ();file = new File (filePath + "yourFileName");fi.write (súbor);out.println ("Nahraný názov súboru: + filePath + fileName + "
");}}out.println ("");out.println ("");} úlovok (výnimka okrem) {System.out.println (ex);}} else {out.println ("");out.println ("");out.println ("

Nebol nahraný žiadny súbor

");out.println ("");out.println ("");}%>

Vysvetlenie kódu:

Action_file.jsp

Riadok kódu 12-18: Tu vytvárame formulár so súborovým poľom, ktorý nahrá súbor na server a akcia sa odošle na action_file_upload.jsp

Action_file_upload.jsp

Riadok kódu 20: Tu dávame cestu k súboru konkrétnej ceste

Riadok kódu 23-38: Tu kontrolujeme, či je typ obsahu multipart / form-data. Ak je to tak, potom je obsah typu súboru a číta sa. Po prečítaní sa súbor zapíše do dočasného súboru a dočasný súbor sa potom prevedie na hlavný súbor.

Po vykonaní vyššie uvedeného kódu získate nasledujúci výstup

Výkon:

Nahrávame súbor pomocou možnosti zvoliť tlačidlo súboru a tlačidlo nahrať súbor nahrá súbor na server na zadanú cestu.

Príklad: Používanie operácií JSP

V tomto príklade ideme nahrať súbor pomocou operácií JSP.

Zoberieme formulár, ktorý bude mať tlačidlo „upload“ a keď kliknete na tlačidlo upload, súbor sa nahrá.

Nahráva sa_1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Nahrávanie súboru guru Súbor:

Vysvetlenie kódu:

Riadok kódu 11-12: Tu berieme formulár, ktorý má akciu na servlete guru_upload, ktorý prejde metódou POST. Ďalej tu uvádzame atribút enctype ie, ktorý určuje, ako sa majú údaje formulára kódovať a odosielať na server a používa sa iba pri metóde POST. Tu nastavujeme viacdielne / formulárové údaje, ktoré sú určené pre súbor (pretože údaje budú veľké).

Riadok kódu 13: Tu zadávame prvok guru_file s typovým súborom a veľkosť dávame 50.

Riadok kódu 15: Toto je tlačidlo typu odoslania s názvom „Nahrať“, cez ktoré bude volaný akčný servlet a do ktorého bude spracovaný dopyt a súbor bude načítaný a zapísaný do servletu.

Guru_upload.java

balíček 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;importovať org.apache.commons.fileupload.FileItem;importovať org.apache.commons.fileupload.disk.DiskFileItemFactory;importovať org.apache.commons.fileupload.servlet.ServletFileUpload;public class guru_upload rozširuje HttpServlet {súkromná statická konečná dlhá serialVersionUID = 1L;public guru_upload () {Super();// TODO Automaticky generovaný útržok konštruktora}protected void doPost (požiadavka HttpServletRequest, odpoveď HttpServletResponse) vyvolá ServletException, IOException {if (ServletFileUpload.isMultipartContent (požiadavka)) {skúsiť {Zoznam  multiparts = nový ServletFileUpload (nový DiskFileItemFactory ()). ParseRequest (požiadavka);pre (položka FileItem: viacdielne) {if (! item.isFormField ()) {Názov reťazca = nový súbor (item.getName ()). GetName ();item.write (nový Súbor ("c: / guru / upload" + File.separator + meno));}}// Súbor bol úspešne nahranýrequest.setAttribute ("gurumessage", "Súbor bol úspešne odovzdaný");} úlovok (výnimka okrem) {request.setAttribute ("gurumessage", "Nahranie súboru zlyhalo z dôvodu" + ex);}} else {request.setAttribute ("gurumessage", "No File found");}request.getRequestDispatcher ("/ result.jsp"). forward (požiadavka, odpoveď);}}

Vysvetlenie kódu:

Riadok kódu 12-14: Tu budeme musieť importovať knižnicu org.apache.commons do konfigurácie kódu. Budeme musieť importovať triedu fileupload z knižnice org.apache.commons.

Riadok kódu 23: Tu máme metódu doPost (), ktorá sa bude volať, keď prechádzame metódu POST v JSP, a bude požadovať a odpovedať na objekty ako svoje parametre

Riadok kódu 26: Tu vytvárame objekt triedy ServletFileUpload z balíka fileUpload z knižnice org.apache.commons, ktorý skontroluje, či v JSP existujú nejaké súborové objekty. Ak sa nejaký nájde, bude tento súborový objekt prevzatý z požiadavky.

Riadok kódu 27-32: Počet súborov iterujeme kontrolou toho, koľko položiek súboru sa nachádza v objekte viacerých častí, čo je objekt zoznamu (ak nahráme viac ako jeden súbor), a uložíme ho do priečinka c: / guru / upload s názov súboru, ktorý bol poskytnutý. Súbor zapisujeme metódou zápisu fileobject do spomínaného priečinka.

Riadok kódu 34: Ak nie je žiadna výnimka, nastavujeme atribút v žiadosti ako gurumessage s hodnotou „Súbor bol úspešne odoslaný“.

Riadok kódu 35-36: Ak dôjde k výnimke, potom sa zobrazí správa, že „Nahranie súboru zlyhalo“

Riadok kódu 40: Ak sa súbor nenašiel, potom sa nastaví správa „Žiadny súbor sa nenašiel“

Riadok kódu 42: Preposlanie požiadavky pomocou objektu requestdispatcher do súboru result.jsp s objektmi request a response.

Result.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Výsledok guru <% String msg = (String) request.getAttribute ("správa");out.println (správa);%>

Vysvetlenie kódu:

Riadok kódu 10: Tu dostávame atribút z objektu požiadavky s hodnotou gurumessage do objektu reťazca.

Kód Line11: Tu tlačíme túto správu.

Keď vykonáme vyššie uvedený kód, dostaneme nasledujúci výstup

Výkon:

Dostaneme formulár, v ktorom sú polia na výber súboru z adresára. Po vybratí súboru musíme kliknúť na tlačidlo nahrávania.

Po kliknutí na tlačidlo nahrávania dostaneme správu, že súbor sa úspešne nahral.

Na nasledujúcom diagrame vidíme, že súbor bol nahraný do priečinka c: / guru / upload.

Sťahovanie súboru:

V tomto príklade si kliknutím na tlačidlo stiahneme súbor z adresára.

Sťahovanie_1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Stiahnutie príkladu guru Guru Stiahnutie súboru  Stiahnutie tu !!! 

Vysvetlenie kódu:

Riadok kódu 10: Tu sme uviedli odkaz na stiahnutie súboru z priečinka c: / guru / upload pomocou servletu guru_download.

Guru_download.java

balíček 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;/ *** Trieda implementácie servletu guru_download* /public class guru_download rozširuje HttpServlet {súkromná statická konečná dlhá serialVersionUID = 1L;protected void doGet (požiadavka HttpServletRequest, odpoveď HttpServletResponse) vyvolá ServletException, IOException {response.setContentType ("text / html");PrintWriter out = response.getWriter ();Reťazec gurufile = "test.txt";Reťazec gurupath = "c: / guru / upload /";response.setContentType ("APLIKÁCIA / OCTET-STREAM");response.setHeader ("Content-Disposition", "príloha; názov súboru = \" "+ gurufile + "\" ");FileInputStream fileInputStream = nový FileInputStream (gurupath+ gurufile);int i;while ((i = fileInputStream.read ())! = -1) {vypísať (i);}fileInputStream.close ();out.close ();}/ *** @see HttpServlet # doPost (požiadavka HttpServletRequest, odpoveď HttpServletResponse)* /protected void doPost (požiadavka HttpServletRequest, odpoveď HttpServletResponse) vyvolá ServletException, IOException {// TODO Automaticky generovaný pahýl metódy}}

Vysvetlenie kódu:

Riadok kódu 3-5: Tu importujeme FileInputStream, IO Exception a PrintWriter z balíka java.io.

Riadok kódu 15: Definujeme servlet guru_download, ktorý rozširuje HttpServlet.

Riadok kódu 18: Ako sme definovali href, ktorý bude uzavretý v URL, takže bude spracovaná metóda GET (doGet bude volaná v servlete), ktorá tiež obklopuje objekty požiadavky a odpovede.

Riadok kódu 19-20: Nastavujeme obsah Type v objekte odpovede a tiež dostaneme objekt spisovateľa z odpovede.

Riadok kódu 21-22: Definovanie premennej ako gurufile ako hodnoty test.txt a gurupath ako c: / guru / upload /

Riadok kódu 23-25: Typ obsahu nastavujeme pomocou objektu odpovede a používame metódu setHeader, ktorá nastavuje hlavičku do objektu odpovede ako názov súboru, ktorý bol nahraný.

Riadok kódu 27-28: Vytvárame FileInputStream, do ktorého pridáme gurupath + gurufile.

Riadok kódu 31-33: Tu sme vzali chvíľu cyklu, ktorý bude bežať, kým sa súbor neprečíta, preto sme dali podmienku ako! = -1. V tomto stave píšeme pomocou objektu printwriter.

Po vykonaní vyššie uvedeného kódu získate nasledujúci výstup

Výkon:

Výkon:

Musíme kliknúť na download_1.jsp, dostaneme hypertextový odkaz ako „Stiahnuť tu“. Keď kliknete na tento súbor hypertextových odkazov, stiahne sa do systému.

Zhrnutie:

  • Dozvedeli sme sa o registračnom formulári na registráciu do akejkoľvek aplikácie
  • Dozvedeli sa viac o tom, ako fungujú prihlasovacie a odhlasovacie formuláre.
  • Dozvedeli sa tiež o nahrávaní a sťahovaní súboru prostredníctvom JSP.