Μεταφόρτωση αρχείου JSP & Παραδείγματα προγράμματος λήψης αρχείων

Πίνακας περιεχομένων:

Anonim

Σε αυτό το παράδειγμα, θα μάθουμε για τη μεταφόρτωση και τη λήψη ενός αρχείου μέσω JSP.

Η έξοδος εισόδου αρχείων είναι πολύ σημαντικές λειτουργίες. Εδώ πρόκειται να διαβάσουμε και να γράψουμε ένα αρχείο χρησιμοποιώντας JSP.

Μεταφόρτωση αρχείου JSP

  • Μπορούμε να ανεβάσουμε αρχεία χρησιμοποιώντας το JSP.
  • Μπορεί να είναι αρχείο κειμένου, δυαδικό αρχείο, αρχείο εικόνας ή οποιοδήποτε άλλο έγγραφο.
  • Εδώ σε περίπτωση μεταφόρτωσης αρχείων, θα χρησιμοποιηθεί μόνο η μέθοδος POST και όχι η μέθοδος GET.
  • Το χαρακτηριστικό Enctype πρέπει να οριστεί σε δεδομένα πολλαπλών τμημάτων / φόρμας.

Παράδειγμα: Χρήση δράσης

Σε αυτό το παράδειγμα, ανεβάζουμε ένα αρχείο χρησιμοποιώντας αντικείμενο IO

Δράση_file.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><κεφάλι>> Αρχείο Guru <άτομο> Μεταφόρτωση αρχείου Guru: Επιλέξτε αρχείο:

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. *"%><κεφάλι>> Μεταφόρτωση αρχείου Guru <άτομο><%Αρχείο αρχείου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 = νέο DiskFileItemFactory ();factory.setSizeThreshold (maxMemSize);factory.setRepository (νέο αρχείο ("c: \\ temp"));ServletFileUpload upload = νέο ServletFileUpload (εργοστασιακό);upload.setSizeMax (maxFileSize);προσπαθήστε{Λίστα αρχείωνItems = upload.parseRequest (αίτημα);Iterator i = fileItems.iterator ();out.println ("");out.println ("");ενώ (i.hasΕπόμενο ()){FileItem fi = (FileItem) i.next ();αν (! fi.isFormField ()) {String fieldName = fi.getFieldName ();String fileName = fi.getName ();boolean isInMemory = fi.isInMemory ();μεγάλο μέγεθοςInBytes = fi.getSize ();file = new File (filePath + "yourFileName");fi.write (αρχείο);out.println ("Μεταφορτωμένο όνομα αρχείου: + filePath + fileName + "
");}}out.println ("");out.println ("");} αλίευση (εξαίρεση ex) {System.out.println (πρώην);}}αλλού{out.println ("");out.println ("");out.println ("

Δεν έχει μεταφορτωθεί αρχείο

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

Επεξήγηση του κωδικού:

Δράση_file.jsp

Γραμμή κώδικα 12-18: Εδώ δημιουργούμε φόρμα με πεδίο αρχείου, το οποίο θα ανεβάσει το αρχείο στον διακομιστή και η ενέργεια θα μεταφερθεί στο action_file_upload.jsp

Action_file_upload.jsp

Γραμμή κώδικα 20: Εδώ δίνουμε τη διαδρομή αρχείου σε μια συγκεκριμένη διαδρομή

Κωδικός Γραμμής 23-38: Εδώ ελέγχουμε αν ο τύπος περιεχομένου είναι πολυμερές / μορφή δεδομένων. Εάν συμβαίνει αυτό, τότε το περιεχόμενο είναι τύπου αρχείου και διαβάζεται. Μετά την ανάγνωση του αρχείου, γράφεται στο προσωρινό αρχείο και στη συνέχεια το προσωρινό αρχείο μετατρέπεται στο κύριο αρχείο.

Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο

Παραγωγή:

Ανεβάζουμε το αρχείο χρησιμοποιώντας το κουμπί επιλογής επιλογής αρχείου και το κουμπί μεταφόρτωσης του αρχείου θα ανεβάσει το αρχείο στον διακομιστή στη διαδρομή που παρέχεται.

Παράδειγμα: Χρήση λειτουργιών JSP

Σε αυτό το παράδειγμα, θα ανεβάσουμε ένα αρχείο χρησιμοποιώντας λειτουργίες JSP.

Θα λάβουμε μια φόρμα που θα έχει το κουμπί «μεταφόρτωση» και όταν κάνετε κλικ στο κουμπί μεταφόρτωσης, τότε το αρχείο θα μεταφορτωθεί.

Μεταφόρτωση_1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><κεφάλι>> Γκουρού Μεταφόρτωση αρχείου <άτομο>Αρχείο:

Επεξήγηση του κωδικού:

Γραμμή κώδικα 11-12: Εδώ παίρνουμε μια φόρμα που έχει δράση στο servlet guru_upload που θα περάσει από μια μέθοδο POST. Επίσης, εδώ ενεργοποιούμε δηλαδή το χαρακτηριστικό που καθορίζει τον τρόπο με τον οποίο τα δεδομένα φόρμας πρέπει να κωδικοποιούνται και να αποστέλλονται στον διακομιστή και χρησιμοποιείται μόνο με τη μέθοδο POST. Εδώ ορίζουμε ως δεδομένα πολλαπλών τμημάτων / φόρμας για το αρχείο (καθώς τα δεδομένα θα είναι μεγάλα).

Γραμμή κώδικα 13: Εδώ καθορίζουμε το στοιχείο guru_file με αρχείο τύπου και δίνουμε μέγεθος ως 50.

Γραμμή κώδικα 15: Αυτό είναι ένα κουμπί τύπου υποβολής με το όνομα "Μεταφόρτωση" πάνω του μέσω του οποίου θα κληθεί το servlet δράσης και το αίτημα θα υποβληθεί σε επεξεργασία σε αυτό και το αρχείο θα διαβαστεί και θα εγγραφεί στο servlet.

Guru_upload.java

demotest πακέτουεισαγωγή java.io.File;εισαγωγή java.io.IOException;εισαγωγή java.util.List;εισαγωγή javax.servlet.ServletException;εισαγωγή javax.servlet.http.HttpServlet;εισαγωγή javax.servlet.http.HttpServletRequest;εισαγωγή javax.servlet.http.HttpServletResponse;εισαγωγή org.apache.commons.fileupload.FileItem;εισαγωγή org.apache.commons.fileupload.disk.DiskFileItemFactory;εισαγωγή org.apache.commons.fileupload.servlet.ServletFileUpload;δημόσιος τάξη guru_upload επεκτείνει το HttpServlet {ιδιωτικό στατικό τελικό μεγάλο serialVersionUID = 1L;δημόσιο γκουρού_upload () {σούπερ();// TODO Αυτόματο παραγόμενο κατασκευαστικό στέλεχος}προστατευμένο άκυρο doPost (αίτημα HttpServletRequest, απόκριση HttpServletResponse) ρίχνει το ServletException, το IOException {εάν (ServletFileUpload.isMultipartContent (αίτημα)) {προσπαθήστε {Λίστα  multiparts = new ServletFileUpload (νέο DiskFileItemFactory ()). ParseRequest (αίτημα);για (στοιχείο FileItem: multiparts) {αν (! item.isFormField ()) {Όνομα συμβολοσειράς = νέο αρχείο (item.getName ()). GetName ();item.write (νέο αρχείο ("c: / guru / upload" + File.separator + name));}}//Το αρχείο ανέβηκε επιτυχώςrequest.setAttribute ("gurumessage", "Το αρχείο μεταφορτώθηκε με επιτυχία");} αλίευση (πρώην εξαίρεση) {request.setAttribute ("gurumessage", "Αποτυχία μεταφόρτωσης αρχείου λόγω" + ex);}}αλλού{request.setAttribute ("gurumessage", "Δεν βρέθηκε αρχείο");}request.getRequestDispatcher ("/ result.jsp"). προώθηση (αίτημα, απάντηση);}}

Επεξήγηση του κωδικού:

Γραμμή κώδικα 12-14: Εδώ θα πρέπει να εισαγάγουμε τη βιβλιοθήκη org.apache.commons στη διαμόρφωση του κώδικα. Θα πρέπει να εισαγάγουμε κλάση φόρτωσης αρχείων από τη βιβλιοθήκη org.apache.commons.

Γραμμή κώδικα 23: Εδώ έχουμε τη μέθοδο doPost (), η οποία θα καλείται καθώς περνάμε τη μέθοδο POST στο JSP και θα ζητήσει και να ανταποκριθεί σε αντικείμενα ως παράμετροι

Γραμμή κώδικα 26: Εδώ δημιουργούμε ένα αντικείμενο της κλάσης ServletFileUpload από το αρχείοUpload πακέτο από τη βιβλιοθήκη org.apache.commons η οποία θα ελέγξει αν υπάρχουν αντικείμενα αρχείων στο JSP. Εάν βρεθεί, τότε το αντικείμενο του αρχείου θα ληφθεί από το αίτημα.

Γραμμή κώδικα 27-32: Θα επαναλάβουμε τον αριθμό των αρχείων ελέγχοντας πόσα στοιχεία αρχείου υπάρχουν σε αντικείμενο πολλαπλών τμημάτων που είναι αντικείμενο λίστας (εάν ανεβάζουμε περισσότερα από ένα αρχεία) και θα το αποθηκεύσουμε σε φάκελο c: / guru / upload με το όνομα αρχείου που έχει δοθεί. Γράφουμε το αρχείο χρησιμοποιώντας τη μέθοδο εγγραφής του αντικειμένου του αρχείου στο φάκελο που έχει αναφερθεί.

Γραμμή κώδικα 34: Εάν δεν υπάρχει καμία εξαίρεση, τότε ορίζουμε το χαρακτηριστικό στο αίτημα ως gurumessage με την τιμή "Το αρχείο μεταφορτώθηκε με επιτυχία".

Γραμμή κώδικα 35-36: Εάν προκύψει εξαίρεση, ορίστε το μήνυμα ότι "Η αποστολή αρχείου απέτυχε"

Γραμμή κώδικα 40: Εάν το αρχείο δεν βρέθηκε, ορίστε το μήνυμα ως "Δεν βρέθηκε αρχείο"

Γραμμή κώδικα 42: Προώθηση αιτήματος χρησιμοποιώντας αντικείμενο requestdispatcher στο result.jsp με αντικείμενα αιτήματος και απόκρισης.

Αποτέλεσμα.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><κεφάλι>> Αποτέλεσμα γκουρού <άτομο><% String msg = (String) request.getAttribute ("μήνυμα");out.println (msg);%>

Επεξήγηση του κωδικού:

Γραμμή κώδικα 10: Εδώ παίρνουμε το χαρακτηριστικό από το αντικείμενο αίτησης με τιμή gurumessage σε ένα αντικείμενο συμβολοσειράς.

Code Line11: Εδώ εκτυπώνουμε αυτό το μήνυμα.

Όταν εκτελούμε τον παραπάνω κώδικα λαμβάνουμε την ακόλουθη έξοδο

Παραγωγή:

Λαμβάνουμε μια φόρμα όπου υπάρχουν πεδία για να επιλέξετε ένα αρχείο από τον κατάλογο. Μόλις επιλεγεί το αρχείο τότε πρέπει να κάνουμε κλικ στο κουμπί αποστολής.

Μόλις κάνετε κλικ στο κουμπί μεταφόρτωσης λαμβάνουμε το μήνυμα ότι το αρχείο μεταφορτώνεται με επιτυχία.

Στο παρακάτω διάγραμμα μπορούμε να δούμε ότι το αρχείο είχε μεταφορτωθεί στο φάκελο c: / guru / upload.

Λήψη αρχείου:

Σε αυτό το παράδειγμα, θα κατεβάσουμε ένα αρχείο από έναν κατάλογο κάνοντας κλικ στο κουμπί.

Λήψη_1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%><κεφάλι>> Λήψη παραδείγματος γκουρού <άτομο>Guru Downloading File  Κάντε λήψη εδώ !!! 

Επεξήγηση του κωδικού:

Γραμμή κώδικα 10: Εδώ έχουμε δώσει σύνδεσμο για να κατεβάσετε ένα αρχείο από το φάκελο c: / guru / upload χρησιμοποιώντας servlet guru_download.

Guru_download.java

demotest πακέτουεισαγωγή java.io.FileInputStream;εισαγωγή java.io.IOException;εισαγωγή java.io.PrintWriter;εισαγωγή javax.servlet.ServletException;εισαγωγή javax.servlet.http.HttpServlet;εισαγωγή javax.servlet.http.HttpServletRequest;εισαγωγή javax.servlet.http.HttpServletResponse;/ *** Κατηγορία γλωσσών_download της εφαρμογής servlet* /δημόσιος τάξη guru_download επεκτείνει το HttpServlet {ιδιωτικό στατικό τελικό μεγάλο serialVersionUID = 1L;protected void doGet (αίτημα HttpServletRequest, απόκριση HttpServletResponse) ρίχνει το ServletException, το IOException {response.setContentType ("κείμενο / html");PrintWriter out = response.getWriter ();String gurufile = "test.txt";String gurupath = "c: / guru / upload /";Respons.setContentType ("ΕΦΑΡΜΟΓΗ / OCTET-STREAM");Respons.setHeader ("Content-Disposition", "attachment; filename = \" ")+ gurufile + "\" ");FileInputStream fileInputStream = νέο FileInputStream (gurupath+ gurufile);int i;ενώ ((i = fileInputStream.read ())! = -1) {out.write (i);}fileInputStream.close ();out.close ();}/ *** @see HttpServlet # doPost (HttpServletRequest request, HttpServletResponse απόκριση)* /προστατευμένο άκυρο doPost (αίτημα HttpServletRequest, απόκριση HttpServletResponse) ρίχνει το ServletException, το IOException {// TODO Αυτόματο δημιουργημένο στέλεχος μεθόδου}}

Επεξήγηση του κωδικού:

Γραμμή κώδικα 3-5: Εδώ εισάγουμε FileInputStream, IO Exception και PrintWriter από το πακέτο java.io.

Γραμμή κώδικα 15: Ορίζουμε servlet guru_download που επεκτείνει το HttpServlet.

Γραμμή κώδικα 18: Όπως έχουμε ορίσει ένα href, το οποίο θα περικλείεται στη διεύθυνση URL, οπότε η μέθοδος GET θα υποβληθεί σε επεξεργασία (το doGet θα κληθεί σε servlet) που περικλείει επίσης αντικείμενα αιτήματος και απόκρισης.

Γραμμή κώδικα 19-20: Ρυθμίζουμε τον τύπο περιεχομένου σε αντικείμενο απόκρισης και λαμβάνουμε επίσης αντικείμενο συγγραφέα από την απόκριση.

Γραμμή κώδικα 21-22: Ορισμός μιας μεταβλητής ως gurufile ως value test.txt και gurupath ως c: / guru / upload /

Γραμμή κώδικα 23-25: Ρυθμίζουμε τον τύπο περιεχομένου χρησιμοποιώντας αντικείμενο απόκρισης και χρησιμοποιούμε τη μέθοδο setHeader που ορίζει την κεφαλίδα στο αντικείμενο απόκρισης ως το όνομα αρχείου που έχει μεταφορτωθεί.

Γραμμή κώδικα 27-28: Δημιουργούμε FileInputStream στο οποίο θα προσθέσουμε το gurupath + gurufile.

Κωδικός Γραμμής 31-33: Εδώ έχουμε πάρει έναν βρόχο που θα τρέξει μέχρι να διαβαστεί το αρχείο, ως εκ τούτου έχουμε δώσει την κατάσταση ως! = -1. Σε αυτήν την κατάσταση γράφουμε χρησιμοποιώντας το αντικείμενο του συγγραφέα.

Όταν εκτελέσετε τον παραπάνω κώδικα, θα λάβετε την ακόλουθη έξοδο

Παραγωγή:

Παραγωγή:

Πρέπει να κάνουμε κλικ στη λήψη_1.jsp θα λάβουμε έναν υπερσύνδεσμο ως "Λήψη εδώ". Όταν κάνετε κλικ σε αυτό το αρχείο υπερσύνδεσης, θα μεταφορτωθεί στο σύστημα.

Περίληψη:

  • Έχουμε μάθει για τη φόρμα εγγραφής για να εγγραφείτε σε οποιαδήποτε αίτηση
  • Μάθετε περισσότερα για το πώς λειτουργεί η φόρμα σύνδεσης και αποσύνδεσης.
  • Επίσης, έμαθε σχετικά με τη μεταφόρτωση και τη λήψη ενός αρχείου μέσω JSP.