Maison Java javaDidacticiel Expliquer la méthode de téléchargement de réponse de Java Web

Expliquer la méthode de téléchargement de réponse de Java Web

Jul 22, 2017 pm 02:24 PM
javaweb 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>
Copier après la connexion

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()));
}
}
Copier après la connexion

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=&#39;utf-8&#39; type=&#39;text/javascript&#39;>alert(&#39;该资源不存在!&#39;);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!");

			}
		}
	}
}
Copier après la connexion

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));
Copier après la connexion

//Définissez la réponse. type, Définir le type de flux de sortie

response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
Copier après la connexion

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;
Copier après la connexion

<. 🎜>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);
	}
Copier après la connexion

<🎜. >

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();
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment résoudre la complexité de l'installation de WordPress et de la mise à jour à l'aide du compositeur Comment résoudre la complexité de l'installation de WordPress et de la mise à jour à l'aide du compositeur Apr 17, 2025 pm 10:54 PM

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.

Accélérer l'inspection du code PHP: Expérience et pratique en utilisant une bibliothèque sur-true / phplint Accélérer l'inspection du code PHP: Expérience et pratique en utilisant une bibliothèque sur-true / phplint Apr 17, 2025 pm 11:06 PM

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.

Comment résoudre le problème de l'analyse SQL? Utilisez GreenLion / PHP-SQL-PARSER! Comment résoudre le problème de l'analyse SQL? Utilisez GreenLion / PHP-SQL-PARSER! Apr 17, 2025 pm 09:15 PM

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.

Comment résoudre un problème de relation d'appartenance complexe à Laravel? Utilisez le compositeur! Comment résoudre un problème de relation d'appartenance complexe à Laravel? Utilisez le compositeur! Apr 17, 2025 pm 09:54 PM

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.

Comment optimiser les performances du site Web: expériences et leçons tirées de l'utilisation de la bibliothèque minifée Comment optimiser les performances du site Web: expériences et leçons tirées de l'utilisation de la bibliothèque minifée Apr 17, 2025 pm 11:18 PM

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.

Résoudre le problème du préfixe CSS à l'aide du compositeur: Pratique de la bibliothèque Padaliyajay / PHP-Autoprefixer Résoudre le problème du préfixe CSS à l'aide du compositeur: Pratique de la bibliothèque Padaliyajay / PHP-Autoprefixer Apr 17, 2025 pm 11:27 PM

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.

Comment résoudre les problèmes d'installation et de configuration des Typo3cms? Cela peut être fait facilement avec le compositeur! Comment résoudre les problèmes d'installation et de configuration des Typo3cms? Cela peut être fait facilement avec le compositeur! Apr 17, 2025 pm 10:51 PM

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.

Résoudre les problèmes de mise en cache dans Craft CMS: Utilisation du plug-in Wiejeben / Craft-Laravel-MIX Résoudre les problèmes de mise en cache dans Craft CMS: Utilisation du plug-in Wiejeben / Craft-Laravel-MIX Apr 18, 2025 am 09:24 AM

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.

See all articles