종이에 나오는 내용은 얕지만, 해야 한다는 걸 알고 계시죠? 오늘 블로거는 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='utf-8' type='text/javascript'>alert('该资源不存在!');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 중국어 웹사이트의 기타 관련 기사를 참조하세요!