Expliquer la méthode de téléchargement de réponse de Java Web
C’est facile de voir ce qui se passe sur papier, mais je sais que je dois le faire ! Aujourd'hui, le blogueur a partagé le téléchargement de la réponse de javaweb
Ce qui suit est ma démo :
Je m'en tiendrai à la partie principale de la page Code
<a href = "${pageContext.request.contextPath }/user/courseTab">模板下载</a>
Bien sûr, tout le monde utilise des frameworks dans les projets en cours, ici j'utilise (SSM) , d'accord, colle le code
@Controller @RequestMapping("/user") public class UploadController { @RequestMapping(value="/courseTab",method=RequestMethod.GET) public void courseTab(HttpServletResponse response,HttpServletRequest request) throws IOException{ String path = request.getSession().getServletContext().getRealPath("/courseTab/课表上传模板.xls"); DownUtil.downMb(response, path, "课表模板"+DateFormat.formatSimple(new Date())); } }
La classe d'outil DownUtil que j'utilise ici est écrite par moi-même, je vais la coller dans l'article
package org.cxxy.base.cxsc.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletResponse; /** * @Title: DownUtil.java * @Package org.cxxy.base.cxsc.util * @Description:文件下载工具类 * @author ChoviWu * @date 2017年6月18日 下午2:44:17 * @version V1.0 */ public class DownUtil { /** * * @Description: * @param @param response * @param @param url 文件在数据库的路径 * @param @param base 文件存放的基础路径 * @param @param folderPath 上传所在的文件夹 * @param @return * @param @throws IOException * @return int * @throws */ @SuppressWarnings("unused") public static int downFile(HttpServletResponse response, String url, Integer down, String base, String folderPath) throws IOException { // 文件的名称 String fileName = url.split("/")[1]; System.out.println(fileName); // 文件的后缀 String last = url.substring(url.lastIndexOf(".") + 1); System.out.println(last); // 文件路径 String downFilePath = base + folderPath + fileName; Long fileLength = new File(downFilePath).length();// 文件的长度 if (fileLength != 0) { response.reset(); response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件 try { response.setHeader( "Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1")); response.setHeader("Content-Length", String.valueOf(fileLength)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } BufferedInputStream bis = null; BufferedOutputStream bos = null; FileInputStream fis = null; try { fis = new FileInputStream(downFilePath); bis = new BufferedInputStream(fis); // 输出流 bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesread; // 写文件 while (-1 != (bytesread = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesread); } // 跳转的路径 fis.close(); bis.close(); bos.close(); } catch (FileNotFoundException e) { System.out.println("File is Not Exsist!"); } } else { // 抛异常 response.getWriter() .write("<script charset='utf-8' type='text/javascript'>alert('该资源不存在!');history.go(-1);</script>"); return down; } down++; return down; } /** * * @Description: 下载的模板 * @param @param response * @param @param path 路径名 * @param @param name 模板名称 * @param @throws IOException * @return void * @throws */ @SuppressWarnings("unused") public static void downMb(HttpServletResponse response, String path, String name) throws IOException { Long fileLength = new File(path).length();// 文件的长度 System.out.println("文件的长度:" + fileLength); if (fileLength != 0) { response.reset(); response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件 try { response.setHeader( "Content-disposition", "attachment; filename=" + new String(name.getBytes("utf-8"), "ISO8859-1")); response.setHeader("Content-Length", String.valueOf(fileLength)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } BufferedInputStream bis = null; BufferedOutputStream bos = null; FileInputStream fis = null; try { fis = new FileInputStream(path); bis = new BufferedInputStream(fis); // 输出流 bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesread; // 写文件 while (-1 != (bytesread = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesread); } fis.close(); bis.close(); bos.close(); } catch (FileNotFoundException e) { System.out.println("File is Not Exsist!"); } } } }
Laissez-moi en parler. Nous savons tous que downMb est appelé pour télécharger un fichier sur le serveur,
//Définissez l'en-tête de réponse et contrôlez le navigateur pour télécharger le fichier. Le paramètre formel ajuste la longueur du fichier
response.setHeader("Content-Length", String.valueOf(fileLength));
//Définissez la réponse. type, Définir le type de flux de sortie
response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
Ici, j'utilise le fichier Excel de sortie
Le suivant L'étape consiste à lire le fichier, à écrire un fichier, je crois que quiconque a appris les bases de Java sera exposé à IO, je vais l'ignorer ici
BufferedInputStream bis = null; BufferedOutputStream bos = null;
<. 🎜>Le flux tampon est utilisé ici. Parce qu'il utilise un navigateur pour ouvrir le téléchargement du fichier
L'étape suivante consiste à écrire le fichier est également une routine cohérente. Enregistrez d'abord le fichier dans le tampon de données du buff, puis ajoutez le buff. Les données sont sorties dans le navigateur pour que les utilisateurs puissent les visualiser
byte[] buff = new byte[2048]; int bytesread; // 写文件 while (-1 != (bytesread = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesread); }
<🎜. >
Après avoir lu et écrit le fichier, des dizaines de millions N'oubliez pas de fermer le flux du fichier (bien sûr, l'ordre de fermeture du flux ne peut pas être modifié)fis.close(); bis.close(); bos.close();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Lors de la gestion des sites Web WordPress, vous rencontrez souvent des opérations complexes telles que l'installation, la mise à jour et la conversion multi-sites. Ces opérations ne prennent pas seulement du temps, mais aussi sujettes aux erreurs, ce qui a entraîné la paralysée du site Web. La combinaison de la commande WP-CLI Core avec Composer peut simplifier considérablement ces tâches, améliorer l'efficacité et la fiabilité. Cet article présentera comment utiliser le compositeur pour résoudre ces problèmes et améliorer la commodité de la gestion WordPress.

Au cours du processus de développement, nous devons souvent effectuer des vérifications de syntaxe sur le code PHP pour assurer l'exactitude et la maintenabilité du code. Cependant, lorsque le projet est grand, le processus de vérification de la syntaxe à thread unique peut devenir très lent. Récemment, j'ai rencontré ce problème dans mon projet. Après avoir essayé plusieurs méthodes, j'ai finalement trouvé la bibliothèque Overrue / Phplint, qui améliore considérablement la vitesse de l'inspection du code par le traitement parallèle.

Lors du développement d'un projet qui nécessite l'analyse des instructions SQL, j'ai rencontré un problème délicat: comment analyser efficacement les instructions SQL de MySQL et extraire les informations clés. Après avoir essayé de nombreuses méthodes, j'ai constaté que la bibliothèque GreenLion / PHP-SQL-Parser peut parfaitement résoudre mes besoins.

Dans le développement de Laravel, le traitement des relations de modèle complexes a toujours été un défi, en particulier en ce qui concerne les relations d'appartenance à plusieurs niveaux. Récemment, j'ai rencontré ce problème dans un projet traitant d'une relation de modèle à plusieurs niveaux, où les relations traditionnelles ont de la part des relations avec les besoins, ce qui fait que les requêtes de données deviennent complexes et inefficaces. Après une certaine exploration, j'ai trouvé la bibliothèque StaudenMeir / appartient à l'encontre, qui a facilement installé et résolu mes problèmes via le compositeur.

En train de développer un site Web, l'amélioration du chargement des pages a toujours été l'une de mes principales priorités. Une fois, j'ai essayé d'utiliser la bibliothèque Miniify pour compresser et fusionner les fichiers CSS et JavaScript afin d'améliorer les performances du site Web. Cependant, j'ai rencontré de nombreux problèmes et défis pendant l'utilisation, ce qui m'a finalement fait réaliser que Miniify pourrait ne plus être le meilleur choix. Ci-dessous, je partagerai mon expérience et comment installer et utiliser MINIFY via Composer.

J'ai un problème délicat lors du développement d'un projet frontal: j'ai besoin d'ajouter manuellement un préfixe de navigateur aux propriétés CSS pour assurer la compatibilité. Cela prend non seulement du temps, mais aussi des erreurs. Après une certaine exploration, j'ai découvert la bibliothèque Padaliyajay / Php-Autoprefixer, qui a facilement résolu mes problèmes avec compositeur.

Lorsque vous utilisez des typo3cms pour le développement de sites Web, vous rencontrez souvent des problèmes avec les extensions d'installation et de configuration. Surtout pour les débutants, comment installer et configurer correctement Typo3 et ses extensions peuvent être un mal de tête. J'ai eu des difficultés similaires dans mon projet réel et j'ai fini par résoudre ces problèmes en utilisant le compositeur et le typo3cmscomposeRinstallers.

Lorsque vous développez des sites Web à l'aide de CRAFTCMS, vous rencontrez souvent des problèmes de mise en cache de fichiers de ressources, en particulier lorsque vous mettez fréquemment à mettre à jour les fichiers CSS et JavaScript, les anciennes versions des fichiers peuvent toujours être mises en cache par le navigateur, ce qui fait que les utilisateurs ne voient pas les derniers changements de temps. Ce problème affecte non seulement l'expérience utilisateur, mais augmente également la difficulté du développement et du débogage. Récemment, j'ai rencontré des problèmes similaires dans mon projet, et après une exploration, j'ai trouvé le plugin wiejeben / artist-laravel-mix, qui a parfaitement résolu mon problème de mise en cache.
