> Java > java지도 시간 > 본문

Java Web의 응답 다운로드 방법을 설명

巴扎黑
풀어 주다: 2017-07-22 14:24:34
원래의
1249명이 탐색했습니다.

종이에 나오는 내용은 얕지만, 해야 한다는 걸 알고 계시죠? 오늘 블로거는 javaweb

의 응답 다운로드에 대해 공유했습니다. 다음은 내 데모입니다.

페이지에 코드의 주요 부분을 붙일 것입니다

<a href = "${pageContext.request.contextPath }/user/courseTab">模板下载</a>
로그인 후 복사

물론, 이제 모두가 프로젝트에 프레임워크를 사용합니다(SSM). 좋아요, 코드를 붙여넣으세요

@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()));
}
}
로그인 후 복사

여기서 사용하는 DownUtil 도구 클래스는 직접 작성한 것입니다

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

			}
		}
	}
}
로그인 후 복사

downMb 호출에 대해 이야기하겠습니다. 우리 모두는 서버에서 파일을 다운로드한다는 것을 알고 있습니다.

//파일을 다운로드하도록 브라우저를 제어하기 위한 응답 헤더를 설정합니다. 파일 길이 조정

response.setHeader("Content-Length", String.valueOf(fileLength));
로그인 후 복사

//응답 유형 설정, 출력 스트림 유형 설정

response.setContentType("application/octet-stream;charset=utf-8"); // 改成输出excel文件
로그인 후 복사

여기서는 출력 Excel 파일을 사용하고 있습니다

다음 단계는 읽는 것입니다. 그리고 파일 쓰기, Java를 배운 것 같아요. 기본은 IO에 노출될 것이므로 여기서는 건너뛰겠습니다

BufferedInputStream bis = null;
BufferedOutputStream bos = null;
로그인 후 복사

버퍼 스트림은 브라우저를 사용하여 파일 다운로드를 열기 때문에 여기서 사용됩니다

다음 단계는 파일을 쓰는 것이고, 파일을 쓰는 것도 일반적인 루틴은 먼저 파일을 버프 데이터 버퍼에 저장한 다음 사용자가 볼 수 있도록 브라우저에 버프 데이터를 출력하는 것입니다

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();
로그인 후 복사

위 내용은 Java Web의 응답 다운로드 방법을 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿