Tải lên tệp JSP & Ví dụ về chương trình tải xuống tệp

Mục lục:

Anonim

Trong ví dụ này, chúng ta sẽ tìm hiểu về tải lên và tải xuống tệp thông qua JSP.

Đầu ra File Input là những thao tác rất quan trọng. Ở đây chúng ta sẽ đọc và ghi một tệp bằng JSP.

Tải lên tệp JSP

  • Chúng tôi có thể tải lên bất kỳ tệp nào bằng JSP.
  • Nó có thể là tệp văn bản, tệp nhị phân, tệp hình ảnh hoặc bất kỳ tài liệu nào khác.
  • Ở đây trong trường hợp tải lên tệp, chỉ phương thức POST sẽ được sử dụng chứ không phải phương thức GET.
  • Thuộc tính Enctype nên được đặt thành nhiều phần / biểu mẫu-dữ liệu.

Ví dụ: Sử dụng Hành động

Trong ví dụ này, chúng tôi đang tải lên một tệp bằng đối tượng IO

Action_file.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Tệp Guru  Tải lên tệp Guru: Chọn tệp:

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. *"%> Tải lên tệp Guru <%Tệp tin;int maxFileSize = 5000 * 1024;int maxMemSize = 5000 * 1024;String filePath = "E: / guru99 / data";String contentType = request.getContentType ();if ((contentType.indexOf ("multiart / form-data")> = 0)) {DiskFileItemFactory factory = new DiskFileItemFactory ();Factory.setSizeThreshold (maxMemSize);factory.setRepository (Tệp mới ("c: \\ temp"));ServletFileUpload upload = new ServletFileUpload (nhà máy);upload.setSizeMax (maxFileSize);thử{Liệt kê fileItems = upload.parseRequest (yêu cầu);Iterator i = fileItems.iterator ();out.println ("");out.println ("");while (i.hasNext ()){FileItem fi = (FileItem) i.next ();if (! fi.isFormField ()) {String fieldName = fi.getFieldName ();String fileName = fi.getName ();boolean isInMemory = fi.isInMemory ();dài sizeInBytes = fi.getSize ();file = new File (filePath + "yourFileName");fi.write (tập tin);out.println ("Tên tệp đã tải lên: + filePath + fileName + "
");}}out.println ("");out.println ("");} catch (Exception ex) {System.out.println (ví dụ);}} khác {out.println ("");out.println ("");out.println ("

Không có tệp nào được tải lên

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

Giải thích mã:

Action_file.jsp

Dòng mã 12-18: Ở đây chúng tôi đang tạo biểu mẫu với trường tệp, trường này sẽ tải tệp lên máy chủ và hành động sẽ được chuyển đến action_file_upload.jsp

Action_file_upload.jsp

Dòng mã 20: Ở đây chúng tôi đang đưa đường dẫn tệp đến một đường dẫn cụ thể

Dòng mã 23-38: Ở đây chúng tôi kiểm tra xem loại nội dung có phải là đa phần / biểu mẫu-dữ liệu hay không. Nếu đúng như vậy, thì nội dung thuộc loại tệp và nó được đọc. Sau khi tệp được đọc, nó được ghi vào tệp tạm thời và sau đó tệp tạm thời được chuyển đổi thành tệp chính.

Khi bạn thực thi đoạn mã trên, bạn nhận được kết quả sau

Đầu ra:

Chúng tôi đang tải tệp lên bằng tùy chọn nút chọn tệp và nút tải tệp lên sẽ tải tệp lên máy chủ theo đường dẫn được cung cấp.

Ví dụ: Sử dụng các hoạt động JSP

Trong ví dụ này, chúng tôi sẽ tải lên một tệp bằng các thao tác JSP.

Chúng tôi sẽ có một biểu mẫu sẽ có nút "tải lên" và khi bạn nhấp vào nút tải lên thì tệp sẽ được tải lên.

Đang tải lên_1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Guru Tải lên Tệp Tệp:

Giải thích mã:

Dòng mã 11-12: Ở đây chúng ta đang lấy một biểu mẫu có hành động trên guru_upload của servlet sẽ chuyển qua một phương thức POST. Ngoài ra, ở đây chúng tôi enctype tức là thuộc tính chỉ định cách dữ liệu biểu mẫu nên được mã hóa và gửi đến máy chủ và nó chỉ được sử dụng với phương thức POST. Ở đây chúng tôi đang đặt làm dữ liệu đa phần / biểu mẫu dành cho tệp (vì dữ liệu sẽ lớn).

Dòng mã 13: Ở đây chúng tôi đang chỉ định phần tử guru_file với loại tệp và cho kích thước là 50.

Dòng mã 15: Đây là nút loại gửi có tên "Tải lên" trên đó, qua đó hành động servlet sẽ được gọi và yêu cầu sẽ được xử lý thành đó và tệp sẽ được đọc và ghi vào servlet.

Guru_upload.java

gói demo;nhập java.io.File;nhập java.io.IOException;nhập java.util.List;nhập javax.servlet.ServletException;nhập javax.servlet.http.HttpServlet;nhập javax.servlet.http.HttpServletRequest;nhập javax.servlet.http.HttpServletResponse;nhập org.apache.commons.fileupload.FileItem;nhập org.apache.commons.fileupload.disk.DiskFileItemFactory;nhập org.apache.commons.fileupload.servlet.ServletFileUpload;public class guru_upload mở rộng HttpServlet {tư tĩnh cuối cùng dài serialVersionUID = 1L;public guru_upload () {siêu();// VIỆC CẦN LÀM Sơ khai của hàm tạo được tạo tự động}được bảo vệ void doPost (yêu cầu HttpServletRequest, phản hồi HttpServletResponse) ném ServletException, IOException {if (ServletFileUpload.isMultipartContent (request)) {thử {List  Multiarts = new ServletFileUpload (new DiskFileItemFactory ()). ParseRequest (request);for (mục FileItem: nhiều phần) {if (! item.isFormField ()) {String name = new File (item.getName ()). GetName ();item.write (new File ("c: / guru / upload" + File.separator + name));}}//Tải tài liệu thành côngrequest.setAttribute ("gurumessage", "Tệp được tải lên thành công");} catch (Exception ex) {request.setAttribute ("gurumessage", "Tải lên tệp không thành công do" + ex);}} khác {request.setAttribute ("gurumessage", "Không tìm thấy tệp");}request.getRequestDispatcher ("/ result.jsp"). chuyển tiếp (yêu cầu, phản hồi);}}

Giải thích mã:

Dòng mã 12-14: Ở đây chúng ta sẽ phải nhập thư viện org.apache.commons vào cấu hình của mã. Chúng tôi sẽ phải nhập lớp tải tệp từ thư viện org.apache.commons.

Dòng mã 23: Ở đây chúng ta có phương thức doPost (), phương thức này sẽ được gọi khi chúng ta truyền phương thức POST trong JSP và nó sẽ yêu cầu và phản hồi các đối tượng dưới dạng tham số của nó

Dòng mã 26: Ở đây chúng ta đang tạo một đối tượng của lớp ServletFileUpload từ gói fileUpload từ thư viện org.apache.commons, nó sẽ kiểm tra xem có bất kỳ đối tượng tệp nào trong JSP hay không. Nếu bất kỳ được tìm thấy thì đối tượng tệp đó sẽ được lấy từ yêu cầu.

Dòng mã 27-32: Chúng tôi sẽ lặp lại số lượng tệp bằng cách kiểm tra xem có bao nhiêu mục tệp hiện diện trong đối tượng nhiều phần là một đối tượng danh sách (nếu chúng tôi tải lên nhiều tệp) và lưu nó vào thư mục c: / guru / upload với tên tệp đã được cung cấp. Chúng tôi đang ghi tệp bằng phương pháp ghi của tệp đối tượng vào thư mục đã được đề cập.

Dòng mã 34: Nếu không có ngoại lệ thì chúng tôi đang đặt thuộc tính trong yêu cầu là gurumessage với giá trị "Đã tải tệp lên thành công".

Dòng mã 35-36: Nếu ngoại lệ xảy ra thì thiết lập thông báo "Tải lên tệp không thành công"

Dòng mã 40: Nếu không tìm thấy tệp thì đặt thông báo là "Không tìm thấy tệp"

Dòng mã 42: Chuyển tiếp yêu cầu sử dụng đối tượng requestdispatcher đến result.jsp với các đối tượng yêu cầu và phản hồi.

Result.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Kết quả Guru <% String msg = (String) request.getAttribute ("message");out.println (tin nhắn);%>

Giải thích mã:

Dòng mã 10: Ở đây chúng ta đang lấy thuộc tính từ đối tượng yêu cầu với giá trị gurumessage vào một đối tượng chuỗi.

Dòng mã 11: Ở đây chúng tôi đang in thông báo đó.

Khi chúng tôi thực thi đoạn mã trên, chúng tôi nhận được kết quả sau

Đầu ra:

Chúng tôi nhận được một biểu mẫu trong đó có các trường để chọn một tệp từ thư mục. Khi tệp được chọn, chúng ta phải nhấp vào nút tải lên.

Sau khi nhấp vào nút tải lên, chúng tôi nhận được thông báo rằng tệp đã được tải lên thành công.

Trong sơ đồ dưới đây, chúng ta có thể thấy tệp đó đã được tải lên trong thư mục c: / guru / upload.

Dữ liệu đang tải:

Trong ví dụ này, chúng tôi sẽ tải xuống một tệp từ một thư mục bằng cách nhấp vào nút.

Đang tải xuống_1.jsp

<% @ page language = "java" contentType = "text / html; charset = ISO-8859-1"pageEncoding = "ISO-8859-1"%> Tải xuống ví dụ về Guru Guru Tải xuống Tệp  Tải xuống tại đây !!! 

Giải thích mã:

Dòng mã 10: Ở đây chúng tôi đã cung cấp liên kết để tải xuống tệp từ thư mục c: / guru / upload bằng servlet guru_download.

Guru_download.java

gói demo;nhập java.io.FileInputStream;nhập java.io.IOException;nhập java.io.PrintWriter;nhập javax.servlet.ServletException;nhập javax.servlet.http.HttpServlet;nhập javax.servlet.http.HttpServletRequest;nhập javax.servlet.http.HttpServletResponse;/ *** Lớp triển khai Servlet guru_download* /public class guru_download mở rộng HttpServlet {tư tĩnh cuối cùng dài serialVersionUID = 1L;được bảo vệ void doGet (yêu cầu HttpServletRequest, phản hồi HttpServletResponse) ném ServletException, IOException {response.setContentType ("text / html");PrintWriter out = response.getWriter ();String gurufile = "test.txt";String gurupath = "c: / guru / upload /";response.setContentType ("ỨNG DỤNG / OCTET-STREAM");response.setHeader ("Nội dung-Bố trí", "tệp đính kèm; tên tệp = \" "+ gurufile + "\" ");FileInputStream fileInputStream = new FileInputStream (gurupath+ gurufile);int i;while ((i = fileInputStream.read ())! = -1) {out.write (i);}fileInputStream.close ();out.close ();}/ *** @see HttpServlet # doPost (yêu cầu HttpServletRequest, phản hồi HttpServletResponse)* /được bảo vệ void doPost (yêu cầu HttpServletRequest, phản hồi HttpServletResponse) ném ServletException, IOException {// VIỆC CẦN LÀM Sơ khai phương thức được tạo tự động}}

Giải thích mã:

Dòng mã 3-5: Ở đây chúng tôi đang nhập FileInputStream, IO Exception và PrintWriter từ gói java.io.

Dòng mã 15: Chúng tôi đang định nghĩa guru_download servlet mở rộng HttpServlet.

Dòng mã 18: Như chúng ta đã định nghĩa a href, sẽ được bao gồm trong URL để phương thức GET sẽ được xử lý (doGet sẽ được gọi trong servlet) cũng bao gồm các đối tượng yêu cầu và phản hồi.

Dòng mã 19-20: Chúng tôi đang thiết lập nội dung Nhập đối tượng phản hồi và cũng nhận đối tượng người viết từ phản hồi.

Dòng mã 21-22: Xác định một biến dưới dạng gurufile là giá trị test.txt và gurupath là c: / guru / upload /

Dòng mã 23-25: Chúng tôi đang đặt loại nội dung bằng đối tượng phản hồi và chúng tôi sử dụng phương thức setHeader đặt tiêu đề vào đối tượng phản hồi dưới dạng tên tệp đã được tải lên.

Dòng mã 27-28: Chúng tôi đang tạo FileInputStream trong đó chúng tôi sẽ thêm gurupath + gurufile.

Dòng mã 31-33: Ở đây chúng tôi đã thực hiện một vòng lặp while sẽ chạy cho đến khi tệp được đọc, do đó chúng tôi đưa ra điều kiện là! = -1. Trong điều kiện này, chúng tôi đang viết bằng cách sử dụng đối tượng printwriter.

Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được kết quả sau

Đầu ra:

Đầu ra:

Chúng tôi phải nhấp vào tải xuống_1.jsp, chúng tôi sẽ nhận được một siêu liên kết là "Tải xuống tại đây". Khi bạn nhấp vào tệp siêu liên kết này, nó sẽ được tải xuống hệ thống.

Tóm lược:

  • Chúng tôi đã tìm hiểu về biểu mẫu đăng ký để đăng ký vào bất kỳ ứng dụng nào
  • Tìm hiểu thêm về cách hoạt động của biểu mẫu đăng nhập và đăng xuất.
  • Cũng đã tìm hiểu về tải lên và tải xuống tệp thông qua JSP.