zoukankan      html  css  js  c++  java
  • Spring文件下载

    package com.smbea.demo.controller;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    /**
     * 文件下载
     * @author hapday
     * @date 2017年1月23日 @time上午10:58:04
     */
    @Controller
    @RequestMapping( value = "admin/file" )
    public class FileDownloadController {
    	protected static final Logger LOGGER = LoggerFactory.getLogger(FileDownloadController.class);
    	
    	@RequestMapping(value = "fileDownloadTest", method = { RequestMethod.GET, RequestMethod.POST })
    	public void fileDownloadTest(HttpServletRequest request, HttpServletResponse response) {
    		String fileName = "test.pdf";
    		
    		try {
    			fileName = URLEncoder.encode("软件秘笈设计模式那点事.pdf", "UTF-8");
    		} catch (UnsupportedEncodingException e1) {
    			e1.printStackTrace();
    		}
    	
    //		System.out.println(request.getServletContext().getMimeType(fileName));
    
    		response.reset();
    		response.setHeader("Content-Disposition", "attachment; filename=" + fileName);// 指定下载的文件名
    		response.setContentType("application/octet-stream");
    		response.setHeader("Pragma", "no-cache");
    		response.setHeader("Cache-Control", "no-cache");
    		response.setDateHeader("Expires", 0);
    
    		URL url = null;		// URL 地址
    		
    		try {
    			url = new URL("http://www.smbea.com/pdf/软件秘笈设计模式那点事.pdf");
    		} catch (MalformedURLException e) {
    			LOGGER.error("无效的 PDF 文件。", e);
    			e.printStackTrace();
    		}
    		
    		try {
    			HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();	// 打开 HTTP 连接
    			httpURLConnection.setDoOutput(true);
    			
    			int responseCode = httpURLConnection.getResponseCode();
    			System.out.println("responseCode = " + responseCode);
    
    			if(500 == responseCode) {
    				System.out.println("HttpURLConnection 内部错误!");
    				
    				return;
    			}
    			if(404 == responseCode) {
    				System.out.println("文件未找到!");
    				
    				return;
    			}
    			
    			if(200 != responseCode) {
    				return ;
    			} 
    			
    			InputStream inputStream = httpURLConnection.getInputStream();	// 获取 HTTP 连接中的输入流
    			OutputStream outputStream = response.getOutputStream();
    			
    			BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); 
    			BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
    			
    			int len = 2048;  
        		      byte[] b = new byte[len];   
        		        while(-1 != (len = bufferedInputStream.read(b))) {   
        		       bufferedOutputStream.write(b, 0, len);  
        		     }  
        		
    			bufferedOutputStream.flush();
    			bufferedOutputStream.close();
    			bufferedInputStream.close();
    			outputStream.close();
    			inputStream.close();
    			httpURLConnection.disconnect();
    		} catch (IOException e) {
    			LOGGER.error("文件下载 - 失败!", e);
    			e.printStackTrace();
    		} 
    	}
    }
    

      

  • 相关阅读:
    实现Runnable接口和继承Thread类的区别
    图的DFS和BFS
    图建模
    数据结构-图的基本知识和表示
    除自身以外的乘积数组(力扣第238题)
    MapReduce源码分析--Shuffle阶段
    转到博客园
    vue中使用剪切板插件 clipboard.js
    vue中使用vue-qrcode生成二维码
    h5中嵌入视频自动播放的问题
  • 原文地址:https://www.cnblogs.com/hapday/p/6343702.html
Copyright © 2011-2022 走看看