Contoh -contoh dalam artikel ini berbagi kode untuk mengunduh breakpoint Java untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
1. Kode Java
// Implementasikan File DownloadFile () {file dir = File baru (FilePath); // Dapatkan path file if (! Dir.exists ()) {System.out.println ("Kesalahan path file"); log.debug ("kesalahan path file"); kembalikan "gagal"; // arah apakah ada file atau folder} file downloadfile = file baru (dir, nama file); // cari file if (! dir.isfile ())) {system.out.println ("File tidak ada"); log.debug ("File tidak ada"); return "fagal"; // Tentukan apakah ada file atau folder} coba {downloadfilerang (downloadfile); } catch (clientabortException e) {System.out.println ("koneksi diakhiri"); log.debug ("koneksi diakhiri"); } catch (ioException e) {e.printstacktrace (); } return null; } private void downloadfileranges (File downloadfile) melempar ioException {// ukuran file yang akan diunduh panjang filelength = downloadfile.length (); // Ukuran File Diunduh Panjang Panjang Panjang = 0; // Apakah akan mengunduh kereta ekspres, jika tidak ada guntur atau boolean lain iSflashget = true; // Digunakan untuk merekam jumlah byte akhir yang perlu diunduh (guntur atau unduhan lainnya) lenend panjang = 0; // Digunakan untuk merekam string rentang data yang diperlukan oleh klien untuk mengunduh string rangebytes = request.getHeader ("range"); // Digunakan untuk membaca dan menulis file acak acak ACCOVECESSFILE RAF = null; OutputStream OS = null; OutputStream output = null; byte b [] = byte baru [1024]; // Jika permintaan unduhan klien berisi rentang if (null! = RangeBytes) {// return code 206 response.setStatus (httpservletResponse.sc_partial_content); rangeBytes = request.getHeader ("range"). ReplaceAll ("bytes =", ""); // Hakim mode string range if (rangebytes.indexof (' -') == rangebytes.length () - 1) {// Tidak ada nomor byte akhir, fast isFlashget = true; rangeBytes = rangebytes.substring (0, rangeBytes.indexof ('-')); Pastlength = long.parselong (rangeBytes.trim ()); } else {// download guntur isflashget = false; String startbytes = rangebytes.substring (0, rangebytes.indexof ('-')); String endbytes = rangebytes.substring (rangebytes.indexof ('-') + 1, rangeBytes.length ()); // Diunduh File Segmen PastLength = long.parselong (startbytes.trim ()); // Jumlah byte file yang perlu diunduh (mulai dari segmen file yang diunduh) lenend = long.parselong (endbytes); }} // Beri tahu klien untuk mengizinkan breakpoint ditransmisikan secara terus menerus, format responsnya adalah: menerima-RANGES: Bytes Response.setHeader ("Receques", "Bytes"); // response.reset (); // Jika itu adalah unduhan pertama, status default menjadi 200, dan format responsnya adalah: http/1.1 200 ok if (0! = PastLength) {// rentang konten string string contentRange = ""; // Format Respons // Content-Range: byte [start byte blok file]-[ukuran total file-1] || [ukuran total file] if (isFlashget) {contentRange = new stringBuffer ("bytes"). Lapis long (pastlength) .toString ()). Append ("-"). .Append ("/"). Append (baru Long (FileLength) .toString ()) .toString (); } else {contentRange = new StringBuffer (rangeBytes) .Append ("/") .Append (baru Long (FileLenge) .toString ()). ToString (); } response.setHeader ("rentang konten", contentRange); } String fileName = getDownloadChinesEfileName (nama file); response.setHeader ("Disposisi Konten", "lampiran; fileName =" + nama file + ""); // Format responsnya adalah: response.setContentType ("Aplikasi/Octet-Stream"); Response.addheader ("panjang konten", string.ValueOf (filelength)); coba {os = response.getoutputStream (); output = baru bufferedoutputStream (OS); RAF = RandomAccessFile baru (DownloadFile, "R"); // lewati byte yang diunduh raf.seek (powlength); if (isFlashget) {// express dll int n = 0; while ((n = raf.read (b, 0, 1024))! = -1) {output.write (b, 0, n); }} else {// guntur dll while (raf.getFilepointer () <lenend) {output.write (raf.read ()); }} output.flush (); } catch (IoException e) { /*** Saat menulis data, pengecualian seperti ClientAbortException* dilemparkan karena klien membatalkan unduhan dan server terus menulis data ke browser. Ini normal. Terutama untuk perangkat lunak klien penghisap darah seperti Thunder. * Jelas ada byte bacaan utas = 1275856879-1275877358. * Jika bacaan tidak selesai dalam waktu singkat, Thunder akan memulai yang kedua dan ketiga lagi. . . Utas membaca segmen byte yang sama sampai satu utas selesai membaca. Thunder akan membunuh * utas lain yang mengunduh segmen byte yang sama, secara paksa membatalkan pembacaan byte, menyebabkan server melempar clientabortException. * Jadi, kami mengabaikan pengecualian ini*/} akhirnya {if (output! = Null) {output.close (); } if (raf! = null) {raf.close (); }}} private string getownloadChinesEfileName (string paramName) {string downloadChinesEfileName = ""; coba {downloadChinesEfileName = string baru (paramname.getbytes ("gbk"), "iso8859-1"); } catch (UnsupportedEncodingException e) {e.printstacktrace (); } return downloadChinesEfilename; } public string getFilePath () {return filepath; } public void setFilePath (string filePath) {this.filePath = filepath; } public String getFileName () {return fileName; } public void setFileName (string fileName) {this.fileName = fileName; } public httpservletRequest getRequest () {request return; } public httpservletResponse getResponse () {return response; } 2. Bagian Struts <br /> Salin kode sebagai berikut: <action name = "downloadfile" method = "downloadfile">
<name result = "gagal" type = "redirectaction"> showdownloadFileNamelist </result>
</ses Action>
3. Bagian JSP
Salinan kode adalah sebagai berikut: <td> <a href = "downloadfile? Filename = $ {filemap.key} && filepath = $ {filemap.value}"> Unduh file </a> </td>