Persyaratan: Menerapkan halaman web dengan fungsi unduhan file, terutama mengunduh paket dan gambar terkompresi:
1: Unduh melalui hyperlink
Di halaman HTML, tautan ke alamat file yang akan diunduh melalui hyperlink
<! Doctype html> <html> <head> <meta charset = "utf-8"> <title> masukkan judul di sini </itement> </head> <hody> <h1> File melalui tautan </h1> </a> </day26/download/cors. </html>
di mana day06/download adalah jalur dokumen, struktur program contoh ini adalah sebagai berikut:
Setelah program dijalankan, Anda dapat mengunduhnya dengan mengklik dokumen yang perlu Anda unduh.
Tetapi masalah akan muncul di sini, yaitu, ketika Anda mengklik untuk mengunduh paket terkompresi, halaman unduhan akan muncul, tetapi ketika Anda mengunduh gambar, browser akan langsung membuka gambar dan tidak ada unduhan.
Ini karena saat mengunduh file melalui hyperlink, jika browser dapat mengenali format file, browser akan terbuka secara langsung. Mengunduh hanya akan dicapai jika browser tidak dapat mengenali format file. Oleh karena itu, metode kedua digunakan untuk mewujudkan fungsi unduhan.
2: Menerapkan Unduh melalui Program Servlet
Prinsip mengunduh file melalui Servlet adalah membaca program target melalui Servlet dan mengembalikan sumber daya ke klien.
<! Doctype html> <html> <head> <meta charset = "UTF-8"> <Title> Masukkan judul di sini </itement> </head> <hody> <h1> Unduh melalui tautan </h1> </a> </a> "Downlow/download/cors. <h1> Unduh file melalui program servlet </h1> <a href = "/day06/servletdownload? fileName = cors.zip"> paket kompresi </a> <a href = "/day06/servletdownload? nama file = 1.png"> gambar </a> </body/html> </html>
Where /Day06 /ServletDownload adalah jalur pemetaan dari program servlet dan kemudian membuat servlet baru, nama servletdownload, dan URL dipetakan ke /servletdownload.
Tambahkan kode sebagai berikut:
paket com.lsgjzhuwei.servlet.response; impor java.io.fileInputStream; impor java.io.fileoutputStream; impor java.io.ioException; impor java.io.inputstream; impor java.io.outputStream; impor javax.servlet.servletException; impor javax.servlet.annotation.webservlet; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; /** * Kelas Implementasi Servlet ServletDownload */@webservlet (asyncsupported = true, urlpatterns = {"/servletdownload"}) kelas publik servletdownload memperluas httpservlet {private static final serialVersionuid = 1l; / ** * @see httpservlet#httpservlet () */ public serveTownDownload () {super (); // TODO Stub Konstruktor yang Dihasilkan Otomatis}/** * @Lihat httpservlet#doGet (permintaan httpservletrequest, httpservletResponse response) * respons void void (httpservlequest, httpservletResponse response) lemparan servletEcception {httppo {httpseption {httpseption response {httpseption {httpseption {httpsception response) lempar levlEcception {httppo {httpseption {httpseption {httpsception) nama string filename = request.getParameter ("fileName"); System.out.println (nama file); // Atur file mime type response.setContentType (getserVletContext (). GetMimetype (fileName)); // atur respons disposisi konten.setHeader ("konten-disposisi", "lampiran; fileName ="+fileName); // Baca file target dan tulis file target ke klien melalui respons // dapatkan jalur absolut dari string file target fullFileName = getserVletContext (). GetRealPath ("/download/" + filename); //System.out.println(fullfileName); // Baca File InputStream di = FileInputStream baru (FullFileName); OutputStream out = response.getoutputStream (); // tulis file int b; while ((b = in.read ())! = -1) {out.write (b); } in.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 } } Mulai ulang server Tomcat untuk mewujudkan unduhan paket dan gambar terkompresi.
Tiga. Tips:
Cara mengunduh file sangat mudah untuk mengklik tautan. Latar belakang mengeluarkan aliran file dan mewujudkan fungsi unduhan melalui browser, termasuk menanyakan tentang lokasi dan penyimpanan file. Sebagian besar browser akan mengkonfigurasi lokasi yang tetap, dan mungkin tidak bertanya setiap saat.
Front-end sangat sederhana, dengan tag <a>, href = "alamat metode backend". Jika kebutuhan Anda tidak dapat langsung digunakan dalam mode hyperlink, Anda dapat menulis window.location.href = "alamat metode backend" di JS.
Setelah melompat ke metode latar belakang
String filePath = this.getClass (). GetClassLoader (). GetResource (""). Pouri (). GetPath () + "/Exportpdf.pdf"; // jalur file dalam file proyek outfile = file baru (filepath); String filename = outfile.getName (); // Dapatkan nama file inputStream fis = baru bufferedInputStream (FileInputStream baru (FilePath)); byte [] buffer = byte baru [fis.available ()]; fis.read (buffer); // Baca File Stream fis.close (); response.reset (); // Setel ulang hasil yang ditetapkan response.addheader ("Disposisi Konten", "Lampiran; FileName =" + String Baru (FileName.Replaceall ("", "") .getbytes ("UTF-8"), "iso8859-1"))); // kembalikan header file name response.addheader ("konten-panjang", "" + outfile.length ()); // kembalikan response ukuran file header.setContentType ("Application/Octet-stream"); // Atur tipe data // Dapatkan output return body outputStream os = baru bufferedOutputStream (response.getoutputStream ()); os.write (buffer); // file output os.flush (); os.close (); Browser akan secara langsung mengenali bentuk output file ini dan kotak dialog muncul.
Perhatikan bahwa metode ini harus disesuaikan di latar belakang menggunakan metode tautan. Tidak mungkin menggunakan metode AJAX dan XMLHTTPREQUEST. Dengan cara ini, aliran file yang dikembalikan akan dikembalikan ke fungsi panggilan balik metode. Tentu saja, jika Anda ingin mendapatkan file di JS, ini akan berhasil.