• 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);
    	}
    
     
     转自:https://www.cnblogs.com/xian-yu/p/13267312.html
  • 相关阅读:
    低代码能做什么?这家服务商用钉钉宜搭打造了智慧医院管理应用
    【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
    如何做规划?分享2种思维和4个方法
    配置审计(Config)配合开启OSS防盗链功能
    被解救的代码
    物联网海量时序数据存储有哪些挑战?
    Serverless:这真的是未来吗?(一)
    数据库学习之MySQL进阶
    网页三剑客之CSS
    网页三剑客之HTML
  • 原文地址:https://www.cnblogs.com/javalinux/p/15665883.html
Copyright © 2020-2023  润新知