Heim > Java > javaLernprogramm > Erklären Sie die Antwort-Download-Methode von Java Web

Erklären Sie die Antwort-Download-Methode von Java Web

巴扎黑
Freigeben: 2017-07-22 14:24:34
Original
1276 Leute haben es durchsucht

Auf dem Papier ist es leicht zu erkennen, was passiert, aber ich weiß, dass ich es tun muss! Heute hat der Blogger über den Antwort-Download von Javaweb berichtet

Das Folgende ist meine Demo:

Ich bleibe beim Hauptteil der Seite Code

<a href = "${pageContext.request.contextPath }/user/courseTab">模板下载</a>
Nach dem Login kopieren

Natürlich verwendet jeder Frameworks in aktuellen Projekten, hier verwende ich (SSM) , okay, füge den Code ein

@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()));
}
}
Nach dem Login kopieren

Die DownUtil-Toolklasse, die ich hier verwende, wurde von mir selbst geschrieben, ich werde sie in den Artikel einfügen

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

			}
		}
	}
}
Nach dem Login kopieren

Lassen Sie mich darüber sprechen. Wir alle wissen, dass downMb aufgerufen wird, um eine Datei auf den Server herunterzuladen,

//Legen Sie den Antwortheader fest und steuern Sie den Browser zum Herunterladen der Datei.

response.setHeader("Content-Length", String.valueOf(fileLength));
Nach dem Login kopieren

//Legen Sie die Antwort fest Typ, Legen Sie den Ausgabe-Stream-Typ fest

response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
Nach dem Login kopieren

Hier verwende ich die Ausgabe-Excel-Datei

Der nächste Der Schritt besteht darin, die Datei zu lesen und eine Datei zu schreiben. Ich glaube, dass jeder, der die Grundlagen von Java gelernt hat, mit IO vertraut gemacht wird 🎜>Der Pufferstrom wird hier verwendet, um den Download der Datei zu öffnen.

BufferedInputStream bis = null;
BufferedOutputStream bos = null;
Nach dem Login kopieren
Der nächste Schritt besteht darin, die Datei zu schreiben. Speichern Sie die Datei zunächst im Buff-Datenpuffer und fügen Sie dann den Buff hinzu. Die Daten werden an den Browser ausgegeben, damit Benutzer sie anzeigen können

byte[] buff = new byte[2048];
	int bytesread;
	// 写文件
	while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
		bos.write(buff, 0, bytesread);
	}
Nach dem Login kopieren
Nach dem Lesen und Schreiben der Datei zig Millionen Vergessen Sie nicht, den Dateistream zu schließen (die Reihenfolge des Schließens des Streams kann natürlich nicht geändert werden)

Das obige ist der detaillierte Inhalt vonErklären Sie die Antwort-Download-Methode von Java Web. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage