Les exemples de cet article partagent le code pour télécharger des points d'arrêt Java pour votre référence. Le contenu spécifique est le suivant
1. Code java
// implémentation de fichier téléchargementfile () {file dir = new File (filePath); // get file pathy if (! Dir.exists ()) {System.out.println ("Erreur de chemin de fichier"); log.debug ("Erreur de chemin de fichier"); return "a échoué"; // Direction Si un fichier ou un dossier existe} Fichier DownloadFile = new File (dir, filename); // Recherchez un fichier if (! dir.isfile ())) {System.out.println ("Le fichier n'existe pas"); log.debug ("Le fichier n'existe pas"); return "a échoué"; // déterminer si le fichier ou le dossier existe} essayez {téléchargementFiERANGES (téléchargement); } catch (clientAbortexception e) {System.out.println ("connexion terminée"); log.debug ("connexion terminée"); } catch (ioException e) {e.printStackTrace (); } return null; } private void downloadFiERANGES (fichier downloadfile) lève ioException {// taille de fichier à télécharger long fileLength = downloadfile.length (); // Taille de fichier téléchargée longue pastLength = 0; // s'il faut télécharger le train express, sinon c'est Thunder ou d'autres booléens isflashget = true; // Utilisé pour enregistrer le nombre d'octets de fin qui doivent être téléchargés (Thunder ou d'autres téléchargements) Long Lenend = 0; // Utilisé pour enregistrer la chaîne de plage de données requise par le client pour télécharger String rangeBytes = request.getheader ("range"); // Utilisé pour lire et écrire des fichiers aléatoirement RandomAccessFile RAF = NULL; OutputStream os = null; OutputStream output = null; octet b [] = nouveau octet [1024]; // si la demande de téléchargement du client contient la plage if (null! = RangeBytes) {// return code 206 réponse.setStatus (httpservletResponse.sc_partial_content); rangeBytes = request.getheader ("range"). RempaceALL ("bytes =", ""); // Judge Range String Mode if (rangeBytes.Indexof ('-') == rangeBytes.length () - 1) {// Il n'y a pas de numéro d'octet de fin, rapide isflashget = true; rangeBytes = rangeBytes.substring (0, rangeBytes.Indexof ('-')); PastLength = Long.Parselong (RangeBytes.trim ()); } else {// tonnerre télécharger isflashget = false; String startBytes = rangeBytes.SubString (0, rangeBytes.Indexof ('-')); String EndBytes = RangeBytes.SubString (rangeBytes.Indexof ('-') + 1, rangeBytes.Length ()); // Segment de fichiers téléchargé PastLength = long.Parselong (startBytes.trim ()); // le nombre d'octets de fichiers qui doivent être téléchargés (Démarrer à partir du segment de fichiers téléchargé) LENEND = LONG.PARSELONG (EndBytes); }} // informez le client pour permettre à la transmission de points d'arrêt en continu, le format de réponse est: accepter les gammes: octets Response.sethEader ("Accept-Ranges", "octets"); // réponse.reset (); // S'il s'agit du premier téléchargement, le statut par défaut est à 200, et le format de réponse est: http / 1.1 200 ok if (0! = PastLength) {// Content Range String String ContentRange = ""; // Format de réponse // Content-Range: octets [Démarrer l'octet du bloc de fichiers] - [Taille totale du fichier-1] || [Taille totale du fichier] if (isflashget) {contentRange = new StringBuffer ("Bytes") .APPEND (new Long (PastLength) .Tostring ()). .APPEND ("/"). Ajouter (new Long (FileLength) .ToString ()) .ToString (); } else {contentRange = new StringBuffer (rangeBytes) .Apnd ("/") .append (new Long (fileLength) .ToString ()). toString (); } Response.sethEader ("Content-Range", ContentRange); } String filename = GetDownloadChineseFileName (filename); Response.sethEader ("Content-Disposition", "attachement; filename =" + filename + ""); // Le format de la réponse est: Response.SetContentType ("Application / Octet-Stream"); Response.AddHeader ("Content-Length", String.ValueOf (FileLength)); essayez {os = réponse.getOutputStream (); sortie = new BufferedOutputStream (OS); RAF = nouveau RandomAccessFile (téléchargement, "R"); // sauter les octets téléchargés raf.seek (passant-longueur); if (isflashget) {// express etc int n = 0; while ((n = raf.read (b, 0, 1024))! = -1) {output.write (b, 0, n); }} else {// thunder etc while (raf.getFilePointer () <leNenn) {output.write (raf.read ()); }} output.flush (); } catch (ioException e) {/ ** * Lors de l'écriture de données, des exceptions telles que ClientAbortexception * sont lancées car le client annule le téléchargement et le serveur continue d'écrire des données sur le navigateur. C'est normal. Surtout pour les logiciels de clients de sang comme Thunder. * Il y a évidemment des octets de lecture de fil = 1275856879-1275877358. * Si la lecture n'est pas terminée dans un court laps de temps, Thunder recommencera les deuxième et troisième. . . Le fil lit le même segment d'octets jusqu'à ce qu'un fil termine la lecture. Thunder tuera * d'autres threads qui téléchargent le même segment d'octets, abandonnent de force la lecture d'octets, ce qui a fait lancer le serveur ClientAbortexception. * Donc, nous ignorons cette exception * /} enfin {if (output! = Null) {output.close (); } if (raf! = null) {raf.close (); }}} String privé GetdownloadChineseFileName (String Paramname) {String downloadChineseFileName = ""; try {downloadChineseFileName = new String (paramname.getBytes ("gbk"), "iso8859-1"); } catch (UnportEnCcodingException 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 () {return request; } public httpservletResponse getResponse () {return réponse; } 2. SECTION DE STUTS <BR /> Copiez le code comme suit: <Action name = "DownloadFile" Method = "DownloadFile">
<result name = "échec" type = "redirectaction"> showdownloadFilenamelist </sult>
</action>
3. Part JSP
La copie de code est la suivante: <td> <a href = "downloadfile? Filename = $ {fileMap.key} && filepath = $ {filemap.value}"> téléchargement de fichiers </a> </td>