Téléchargement du modèle. Bien sûr, tout le monde utilise des frameworks dans les projets en cours. Ici, j'utilise (SSM). Bon, collez le code."/> Téléchargement du modèle. Bien sûr, tout le monde utilise des frameworks dans les projets en cours. Ici, j'utilise (SSM). Bon, collez le code.">

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

巴扎黑
巴扎黑original
2017-07-22 14:24:341267parcourir

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

67cd8d1652231f66d323b1db71360b5e模板下载5db79b134e9f6b82c0b36e0489ee08ed

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=&#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!");

			}
		}
	}
}

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!

Déclaration:
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