zoukankan      html  css  js  c++  java
  • springboot下载文件(使用流)

    1.FileServiceImpl.java

    /**
    	 * 下载文件
    	 * 
    	 * @param address
    	 * @param response
    	 * @throws IOException
    	 */
    	@Override
    	public void downloadFile(String address, HttpServletResponse response) throws IOException {
    		if (address.contains("%")) {
    			try {
    				address = URLDecoder.decode(address, "UTF-8");
    			} catch (UnsupportedEncodingException e) {
    				throw new CyException("文件路径有误");
    			}
    		}
    		ServletOutputStream out = null;
    		FileInputStream in = null;
    		try {
    			in = new FileInputStream(new File(address));
    			String[] dir = address.split("/");
    			String fileName = dir[dir.length - 1];
    			// 设置响应类型为html,编码为utf-8,处理相应页面文本显示的乱码
    			response.setContentType("application/octet-stream");
    			// 设置文件头:最后一个参数是设置下载文件名
    			response.setHeader("Content-disposition", "attachment;filename=" + fileName);
    			out = response.getOutputStream();
    			// 读取文件流
    			int len = 0;
    			byte[] buffer = new byte[1024 * 10];
    			while ((len = in.read(buffer)) != -1) {
    				out.write(buffer, 0, len);
    			}
    			out.flush();
    		} catch (FileNotFoundException e) {
    			throw new CyException("文件路径有误");
    		} finally {
    			response.flushBuffer();
    			try {
    				out.close();
    				in.close();
    			} catch (NullPointerException e) {
    				throw new CyException("responseFileStream stream close() error:NullPointerException" + e.toString());
    			} catch (Exception e) {
    				throw new CyException("responseFileStream stream close() error:" + e.toString());
    			}
    		}
    
    	}
    

    2.FileController.java

    @RequestMapping(value = "/downloadFile", method = RequestMethod.GET)
    	@ResponseBody
    	@Validated
    	public void downloadFile(@NotBlank @RequestParam(value = "address") String address, HttpServletResponse response)
    			throws IOException {
    		fileService.downloadFile(address, response);
    	}
    
  • 相关阅读:
    HTML常用标记(完整版)
    理论精讲-教育知识与能力7-第四章 中学生学习心理
    前端面试题总结
    for-in 和for-of循环的区别
    Nginx部署多个vue前端项目
    vue项目PC端如何适配不同分辨率屏幕
    基于Vue的项目打包为移动端app
    js中Date对象
    React Router的Route的使用
    js中数组的sort() 方法
  • 原文地址:https://www.cnblogs.com/xian-yu/p/13267312.html
Copyright © 2011-2022 走看看