Cet article décrit la méthode de programmation Java pour implémenter la prise en charge côté serveur pour la transmission continue de point d'arrêt. Partagez-le pour votre référence, comme suit:
Tout le monde sait que les flux Tomcat peuvent prendre en charge la transmission continue des points d'arrêt pour les ressources statiques, mais s'il s'agit d'un flux contrôlé, s'il a un contrôle d'autorisation, ou si l'adresse de téléchargement n'est qu'un proxy, vous devez implémenter la prise en charge de la transmission continue de BreakPoint par vous-même . Le code est affiché et tout le monde le partagera ensemble:
Servlet
Importer java.io.bufferedoutputStream; import java.io.file; import java.io.ioException; import java.io.randomaccessfile; import java.io.unsupport edencodingException; import java.net.uri; import java.net.urisyntaxException; Importer java.net.urldecoder; import javax.servlet.servletException; import javax.servlet.servletOutStream; import javax.servlet.http.httpservletRequest; Base .baseservlet; import com.bsteel.cloud.storage.utils.fileutil; / ** * Téléchargement de fichiers (prend en charge la transmission continue de Breakpoint [Thunder / Express / Tornado / Firefox / Chrome]) * @author Jdkleo * * / Classe publique F F ileIoServlet extends BaseServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) thro ws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse réponse) : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :::::::::::::::::::::::::::::::::::- :::::::::::::::::::::::::::::: lance Servlexception, ioException {télécharger (requête, réponse); Param Demande * @Param Response * @Throws UnsupportDenCcodin GEXCECTION * / Private Void Download (HttpServLetRequest Request, HTTPServletResponse) lance unpportdencodingException {File DownloadFile = GetFile (request); Log.info ("skip" + pos); ); ))! = -1) {out.write (b, 0, n);} out.flush ();} catch (ioException ie) {}} Catch (exception e) {log.Error (e.getMessage () , e);} enfin {if (out! = null) {try {out.close ();} catch (ioException e) {log.Error (e.getMessage (), e); null) {try {raf.close ();} catch (ioException e) {log.Error (e.getMessage (), e);}}} file privé getFile (httpservletRequest request) lance un supportdEnCoDEnDingException {string URST = request. getParameter ("uri"); (7); : :::::::::::::::::::::::::::::::::::- : :::::::::::::::::::::::::::::::::::- :::::: {return new fichier (new uri (urist));} catch (urisyntaxException e) {log.Error (e.getMessage (), e); un réel uri ");}}
Prise en charge de l'ordre
Importer java.io.file; import javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletResponse; / ** * outil de traitement de fichier * @author jdkleo * * / public class FileUtil {/ ** * Breakpoint continuation pass Prise en charge * @param fichier * @param demande * @param réponse * @return combien d'octets à sauter * / public static long headersetting (fichier de fichier, httpsservletRequest request, httpservletres ponse réponse) {long len = file.length (); // Longueur de fichier if (null == request.GetHeader ("plage")) {setResponse (new rangeSettings (Len), file.getName (), réponse); Les paramètres de RangeSettings = GetSet () Paramètres, String FileName, HttpServletResponse Response) {Response.AddHeader ("Content-Disposition", "Pixe; FileName)); // Définit le type MIME. Settings.getStart (); String.valueof (contentLength)); string contenu contenu = new StringBuffer ("Bytes") .Apnd (start) .append ("-"). Settings.getTotAllNength (). TOSTRIN G (); end = 0; ; ; 1]).
Package de gamme
Classe publique Rangesttings {Longuet privé; {this.start = start; ) {return start;} public void setStart (long start) {this.start = start;} public long getend () {return end;} public void setend (long fin) {this.end = end; ) {return ContentLength;} public void setContentLength (Long ContentLength) {this.contentLeng () {Retour Range;}
Classe d'outils de traitement lié au flux IO
Importer java.io.inputStream; public class ioutil {public static String setContentType (String returnFileName) {String ContentType = "Application / Octet -Stream"; .tolowercase (); "shtml")) {contentType = "text / html";} else if (returnFileName.equals ("css")) {contentType = "text / css"; {contentType = "Text / xml";} else if (returnFileName.equals ("gif") {contentType = "Image / GIF"; "jpg")) {contentType = "Image / jPeg"; ). ) {contentType = "text / mathml";} else if (returnFileName.equals ("txt")) {contentType = "Text / Plain"; /vnd.sun. ). Filename.equals ("tiff")) {contentType = "image / tiff";} else if (returnFileName.equals ("wbmp")) {contentType = "image / vnd.wap.wbmp";; égal (ico ")) {contentType =" image / x-icon ";} else if (returnFileName.equals (" jng ")) {contentType =" image / x-jng "; "bmp")) {contentType = "image / x-ms-bmp";} else if (returnFileName.equals ("svg")) {contentType = "Image / svg + xml"; "jar") || returnFileName .equals ("var") || returnFileName.equals ("ear") {contentType = "application / java-archive"; contenu type = "application / msword";} else if (returnFileName.equals ("pdf")) {contentType = "application / pdf"; / rtf ";} else if (returnFileName .equal .ms-po werpoint ";} else if (returnFileName.equals (" 7Z ")) {contentType =" application / x-7z-compressement ";} else if (returnFileName.equals (" rar ")) {contentType =" appli cation / x-rar-compressé ";} else if (returnFileName.equals (" swf ")) {contentType =" application / x-shockwave-flash ";} else if (returnFileName.equals (" rpm ")) { contenu type = "application / x-redhat-package- manager";} else if (returnFileName.equals ("der") || returnFilename.equals ("pem") || = "applicati on / x-x509-ca-certe";} else if (returnFileName.equals ("xhtml")) {contentType = "Application / xhtml + xml"; ) {contntype = "application / zip";} else if (returnFileName.equals ("mid") || returnFileName.equal midi ";} else if (returnFileName.equals (" mp3 ")) {contentType =" Audio / mpeg ";} else if (returnFileName.equal (returnFileName.equals ("M 4A")) {contentType = "Audio / X-M4A"; returnFileName.equals ("3GPP") || returnFileName.equals ("3GP")) {contentType = "Video / 3GPP"; } else if (returnFileName.equal s ("mpeg") || returnFileName .equals ("mpg")) {contentType = "Video / MPEG"; Vidéo / QuickTime ";} else if (retu rnFileName.equals (" flv ")) {contentType =" Video / X-Flv ";} else if (returnFileName.equal -m4v ";} else if (returnFileName.equals ls (" mng ")) {contentType =" video / x-mng ";} else if (returnFileName.equals (" asx ") || returnFileName.equals (" asf " ). Avi ")) {contentType =" vidéo / x-msv ideo ";} return contentType;} // utf8 transcoding public static static toutf8string (string s) {stringBuffer sb = new StringBuffer (); int len = s.tocharArray () .length; pour (int i = 0; i <len; i ++) {char c = s.Carat (i); else {octet [] b; ; . Sautage (InputStream dans, Long HowMany) lance ex-ception {Long Rester = Howmany; Long Len = 0;
Remarque Certaines catégories telles que la méthode Ioutil proviennent du résumé des internautes CSDN.
J'espère que cet article sera utile à la programmation Java de tous.