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

巴扎黑
Libérer: 2017-07-22 14:24:34
original
1271 Les gens l'ont consulté

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal