Di Javaweb, mengunggah dan mengunduh adalah fungsi umum. Untuk unggahan file, browser menyerahkan file ke server dalam proses mengunggah file dalam proses streaming. Secara umum, paket Commons-Fileupload digunakan untuk mengimplementasikan fungsi unggahan. Karena Commons-Fileupload tergantung pada paket Commons -o, Anda perlu mengunduh dua paket ini Commons-Fileupload-1.2.1.jar dan Commons-OO-1.3.2.jar.
1. Bangun lingkungan
Buat proyek web dan impor paket ke dalam proyek lib
2. Menerapkan unggahan file
(Metode pengunggahan pertama)
Buat halaman unggahan.jsp baru
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = UTF-8 "> <itement> unggah file </title> </head/head </header = uTF-8"> <title> unggah file </title> </head/head </header> <! Jalur absolut ke proyek, yang berarti bahwa di mana pun Anda menyalin proyek di masa depan, ia akan menemukan jalur yang tepat-> <form Action = "<%= request.getContextPath ()%>/mengunggahServlet" enctype = "multipart/form-data" Method = "post"> <span> Pilih file: </span> <input/form-data "Method =" POST "> <span> File: </span> <input type/form-data" Method = "Post" </form> </body> </html>
Buat servlet baru yang menangani unggahan file
Paket com.load; import java.io.file; import java.io.ioexception; import java.util.list; import javax.servlet.servletcontext; import javax.servlet.servletException; import javax.annotation.webservlet; impor javax.servet; javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileitem; impor org.apache.commons.fileupload.fileuPoadeM; org.apache.commons.fileupload.disk.diskFileItemFactory; impor org.apache.commons.fileupload.servlet.servletfileUpload; @webservlet ("/unggah servlet") SERIALVERSERVLEAD; unggahan publik () {super (); } /* Dalam paket Fileupload, elemen formulir kompleks dalam permintaan HTTP dianggap sebagai objek FileItem; * The FileItem object must be parsed by the parseRequest() method in the ServletFileUpload class* (that is, the wrapped HttpServletRequest object), that is, the specific text form and upload file are separated* */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Use Metode isMultiPartContent (): Menganalisis apakah ada permintaan pada file dalam permintaan, boolean ismultipart = servletfileupload.ismultipartContent (permintaan); if (isMultipart) {// Buat pabrik diskfileItemFactory node disk node yang dapat disetel = diskfileItemFactory () baru; // Dapatkan informasi konteks dari permintaan servletContext servletContext = request.getSerVletContext (); // Direktori cache, setiap repositori file direktori khusus server = (file) servletcontext.getAttribute ("javax.servlet.context.tempdir"); // Atur pabrik direktori cache server.setrepository (repositori); // Pembuatan Objek ServletFileUpload perlu bergantung pada FileItemFactory // Pabrik menyimpan objek FileItem file unggah yang diperoleh ke hard disk server, yaitu, objek DiskFileItem. SERVLETFILEUPLOAD UEDLOAD = SERVLETFILEUPLOAD baru (pabrik); Coba {// Parse objek httpservletRequest setelah dibungkus, yaitu untuk memisahkan formulir teks dan mengunggah file (permintaan http akan dibungkus sebagai daftar httpservletRequest) <fileitem> items = unggah.parserequest (permintaan); untuk (item fileItem: item) {string fieldName = item.getFieldName (); String filename = item.getName (); String contentType = item.getContentType (); boolean isInmemory = item.isinMemory (); ukuran panjanginbytes = item.getSize (); // instantiate file // request.getRealPath (dapatkan path nyata) File file = file baru (request.getRealPath ("/")+"/muat"+filename.substring (filename.LastIndexof ("//")+1, filename.length ())); item.write (file); }} catch (fileuploadException e) {e.printstacktrace (); } catch (Exception e) {E.PrintStackTrace (); }}} void dopost yang dilindungi (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}(Metode Upload Kedua)
Buat halaman JSP baru (sama seperti di atas, hanya jalur yang diubah)
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = UTF-8 "> <itement> unggah file </title> </head/head </header = uTF-8"> <title> unggah file </title> </head/head </header> <! the absolute path to the project, which means that no matter where you copy the project to in the future, it will find the exact path--> <form action="<%=request.getContextPath()%>/uploadservlet1" enctype="multipart/form-data" method="post"> <span>Select file: </span><input type="file" name="file1"> <input type="submit" value = "unggah"> </form> </body> </html>
Buat servlet untuk menangani unggahan
Paket com.load; import java.io.file; import java.io.fileoutputStream; import java.io.ioException; import java.io.inputStream; import java.io.outputStream; import javax.servlet.servletException; impor javax.servlet.notation.mulrlet javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor; javax.servlet.http.part; @webservlet ("/unggahServlet1")@multipartconfig (location = "") kelas publik unggahanServlet1 memperluas httpservlet {private static final long serialversionuid = 1l; Public unggahServlet1 () {super (); } Protected void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = UTF-8"); request.setcharacterencoding ("UTF-8"); // dapatkan unggah file dan baca bagian file bagian = request.getPart ("file1"); // Tentukan variabel untuk menerima nama file string fileName = null; // konten-disposisi: Ini untuk memberikan nama file default ketika pengguna ingin menyimpan konten yang diminta sebagai file // konten-disposisi: beri tahu browser untuk membuka file dengan mengunduh untuk (konten string: part.getHeader ("konten konten"). Split (";")) {System.out.println (konten); // Dapatkan nama file if (content.trim (). Startswith ("fileName")) {// mencegat nama file fileName = content.substring (content.indexof ('=') + 1) .trim (). REPLACE ("/" "," ");} ELY // outputStream out = nol;/inputeP input; inputeP; inputeP; inputeP; inputeP; nol; input. Baris pemisah sistem dan data lain = FileOnputStream baru (file baru ("E:/Loads" + File.separator + FileName)); out.write (bytes, 0, baca);(Metode pengunggahan ketiga)
Paket JSPSMARTUPLOAD digunakan di sini untuk mengunggah dan diunduh. Penulis percaya bahwa unggahan dan unduhan semacam ini relatif sederhana, tetapi tampaknya banyak orang tidak menggunakannya dan tidak memahaminya.
Buat halaman HTML
<! Doctype html> <html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <itement> unggah file </iteme> </adeplet> <p> </p> <p align = "center"> unggah file </p> <p> </p> <p> enctype = "multipart/form-data"> <Table align = "center"> <tr> <td> <div align = "center"> 1. <input type = "file" name = "file1"> </div> </td> </tr> <tr> <td> <v align = "center"> 2. </td> </tr> <td> <td> <v align = "center"> 2. <input> name = "FILE =" <tr><td><div align="center"> 3.<input type="file" name="file3" > </div></td></tr> <tr><td><div align="center"> <input type="submit" name="Submit" value="upload him"> </div></td></tr> </table> </form></body></html>
Buat servlet untuk memproses file unggahan
Paket com.load; impor java.io.ioException; import java.io.printwriter; import javax.servlet.servletException; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; impor javax.servlet.servlet.http.htpservlet; impor javax.servlet javax.servlet.http.httpservletResponse; import javax.servlet.jsp.jspfactory; import javax.servlet.jsp.pagecontext; import com.jspsmart.upload.file; impor com.jspsmart.upload.smartuPart.uPload.file; com.jspsmart.upload.smartuploadException; @webservlet ("/doubloadservlet") Unduhan kelas publik memperluas httpservlet {private static final long serialversionuid = 1L; public downloadservlet () {super (); } Protected void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = UTF-8"); Printwriter out = response.getWriter (); // Buat objek unggah pintar baru Smartupload su = Smartupload baru (); / * * PageContext PageContext; Sesi httpsession; Aplikasi ServletContext; Konfigurasi servletconfig; JSpwriter out; Halaman objek = ini; Permintaan httpservletrequest, respons httpservletResponse di mana objek halaman, permintaan dan respons telah dipakai, sedangkan 5 objek lainnya yang tidak dipakai dipakai dengan cara berikut pagecontext = jspxfactory.getPagecontext (ini, permintaan, respons, null, true, 8192, 8192); */// Dapatkan lingkungan konteks melalui kelas pabrik JSP pagecontext pagecontext = jspfactory.getDefaultFactory (). GetPageContext (ini, permintaan, respons, null, true, 8192, true); // unggah inisialisasi su.initialize (pageContext); // unggah file coba {su.upload (); // Simpan file unggah ke direktori int yang ditentukan count = su.save ("/share"); out.println (count+"Berunggah file berhasil! <br>"+su.toString ()); } catch (SmartuploAdException e) {e.printstacktrace (); } // Ekstrak unggah informasi file satu per satu untuk (int i = 0; i <su.getFiles (). GetCount (); i ++) {file file = su.getFiles (). GetFile (i); // Jika file tidak ada jika (file.ismissing ()) lanjutkan; // tunjukkan informasi file saat ini out.println ("<tabel border = 1>"); out.println ("<tr> <td> Formulir Nama Item (FieldName) </td> </td>"+file.getFieldName ()+"</td> </tr>"); out.println ("<tr> <td> panjang file </td> <td>"+file.getSize ()+"</td> </tr>"); out.println ("<tr> <td> Nama file </td> <td>"+file.getFileName ()+"</td> </tr>"); out.println ("<tr> <td> Nama file </td> <td>"+file.getFileName ()+"</td> </tr>"); out.println ("<tr> <td> ekstensi file </td> <td>"+file.getFileExt ()+"</td> </tr>"); out.println ("<tr> <td> file nama lengkap </td> <td>"+file.getFilePathName ()+"</td> </tr>"); out.println ("</boable> <br>"); }} / ** * @See httpservlet#dopost (permintaan httpservletrequest, respons httpservletResponse) * / void dopost (httpservletequest request, httpservletResponse respons) (IoException METODE (IOOEXEPTECEPONE (IOEKEPLETEDE (IOEKEPLETECECECTION, IOO-EXPRESSEDE (IOEeksepsi, }} Catatan: Kode int count = su.save ("/share"); berarti bahwa Anda perlu membuat folder terlebih dahulu, sehingga Anda dapat membuat satu di webcontent, kemudian tidak menggunakan proyek, dan kemudian menggunakannya kembali, folder akan dibuat di sisi yang dijalankan!
Atau Anda dapat secara langsung menemukan jalur untuk menjalankan dan membuat folder berbagi.
3. REALUSI LEBIH BANYAK
(Unduh File Pertama)
Catatan: Kode ini secara langsung mengakses kelas servlet
Paket com.load; import java.io.fileInputStream; import java.io.ioException; import java.io.inputstream; import java.io.outputStream; javax.servlet.servletException; import javax.servlet.annotation.webservlet; impor javax.servlet. javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; // langsung menggunakan http: // localhost: 8080/test1/unduh untuk diunduh, tetapi ini cacat. Jika ada bahasa Cina dalam nama file unduhan, itu akan menjadi kacau! @Webservlet ("/download") Unduh kelas publik memperluas httpservlet {private static final long serialversionuid = 1l; unduhan publik () {super (); } Protected void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/polos; charset = utf-8"); response.setcharacterencoding ("UTF-8"); response.setheader ("lokasi", "cina.txt"); response.setHeader ("Disposisi Konten", "Lampiran; FileName =" + "Account.txt"); OutputStream outputStream = response.getoutputStream (); InputStream inputStream = new fileInputStream ("e:/muat"+"/account.txt"); byte [] buffer = byte baru [1024]; int i = -1; while ((i = inputStream.read (buffer))! = -1) {outputStream.write (buffer, 0, i); } outputStream.flush (); outputStream.close (); } Protected void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}(Metode unduhan kedua)
Buat halaman JSP baru dan pilih Unduh
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> unduh </title> </head> <body> a href = "../ dodownloadservlet? FileName = hehe.txt"> Klik untuk mengunduh </a> </body> </html>
Buat kelas servlet untuk diunduh (Catatan: Jika nama file unduhan ini adalah bahasa Cina, masih akan menyebabkan kode kacau)
Paket com.load; impor java.io.bufferedInputStream; import java.io.file; impor java.io.fileinputStream; impor java.io.ioException; impor java.io.inputStream; impor java.outputStream; impor java.net.urlencoder; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletresponse; impor javax.servlet.http.httpservletresponse; impor javax.servlet javax.servlet.jsp.pagecontext; impor org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartupload; import com.jspssmart.uploadservlet {@webservlet @webservlet ("/dodownloadservlet") SerialVersionuid = 1L; public dodownloadservlet () {super (); } Protected void doGet (permintaan httpservletRequest, httpservletResponse response) melempar servletException, ioException {// dapatkan nama file yang diunduh // string filename = request.getParameter ("filename"); // string filename = string baru (filename.getbytes ("iso8859-1"), "utf-8"); // Buat objek Smartupload baru Smartupload su = new SmartUpload (); Pagecontext pagecontext = jspfactory.getDefaultFactory (). GetPageContext (ini, permintaan, respons, null, true, 8192, true); // unggah inisialisasi su.initialize (pageContext); // atur pembukaan file su.setContentDisposition (null); // Unduh File Coba {su.DownloadFile ("/listener/"+filename); } catch (SmartUploAdException e) {// TODO Auto-Encanerated Catch Block E.PrintStackTrace (); }} Protected void dopost (permintaan httpservletrequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}(Metode pengunduhan ketiga)
Kode halaman JSP yang sama seperti di atas tidak akan diulangi di sini.
Buat kelas Serlvet baru untuk mengimplementasikan fungsi unduhan (Catatan: Bahkan jika nama file adalah nama Cina, tidak akan ada masalah yang kacau!)
Paket com.load; impor java.io.bufferedInputStream; import java.io.file; impor java.io.fileinputStream; impor java.io.ioException; impor java.io.inputStream; impor java.outputStream; impor java.net.urlencoder; javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletresponse; impor javax.servlet.http.httpservletresponse; impor javax.servlet javax.servlet.jsp.pagecontext; impor org.hsqldb.lib.stringutil; import com.jspsmart.upload.smartupload; import com.jspssmart.uploadservlet {@webservlet @webservlet ("/dodownloadservlet") SerialVersionuid = 1L; public dodownloadservlet () {super (); } Protected void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// dapatkan nama file string path1 = request.getParameter ("fileName"); // dapatkan nama path string path = request.getSession (). Getservercontext (). GetRealPath ("/listener/"+path1); // Path adalah file yang disambung berdasarkan jalur log dan nama file. String filename = file.getName (); Coba {// menilai apakah itu IE11 boolean flag = request.getheader ("user-agent"). indexOf ("Like Gecko")> 0; // IE11 Pengguna-Agen String: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; RV: 11.0) Seperti Gecko // IE6 ~ IE10 Versi Pengguna-Agen String: Mozilla/5.0 (Kompatibel; MSIE 10.0; Windows NT 6.0; Trident/6.0) Jika Kompatibel; (request.getHeader ("User-agent"). TolowerCase (). IndexOf ("MSIE")> 0 || flag) {filename = urlencoder.encode (nama file, "utf-8"); // yaitu browser} else {// pertama-tama hapus spasi dalam nama file, dan kemudian konversi encoding encoding {// pertama-tama hapus spasi dalam file dalam file, dan kemudian encoding format encoding {// hapus spaces di no-name, dan kemudian encoding format encoding {// hapus spaces di no-name, dan kemudian encoding format encoding {// hapus space di file no noing di no-uSe that no hapus no-{// // Nama file ini digunakan untuk nama file yang ditampilkan secara otomatis di kotak unduhan browser filename = string baru (filename.replaceall ("", "") .getbytes ("UTF-8"), "iso8859-1"); // Browser Firefox // Firefox Browser User-Agent String: //mozilla/5.0 (Windows NT 6.1; WOW64; RV: 36.0) Gecko/20100101 Firefox/36.0} InputStream FIS = BufferedInputStream baru (FileinputStream baru (PATH)); byte [] buffer; buffer = byte baru [fis.available ()]; fis.read (buffer); fis.close (); response.reset (); response.addheader ("Disposisi Konten", "lampiran; fileName =" +nama file); response.addheader ("panjang konten", "" + file.length ()); OutputStream os = response.getoutputStream (); response.setContentType ("Application/Octet-stream"); Os.write (buffer); // file output os.flush (); os.close (); } catch (ioException e) {e.printstacktrace (); } System.out.println (nama file); } Protected void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.