从网络下载文件以流文件的方式给到浏览器
 
package com
.hengqin
.life
.face
.util
;
import lombok
.extern
.slf4j
.Slf4j
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;
import java
.io
.ByteArrayOutputStream
;
import java
.io
.IOException
;
import java
.io
.InputStream
;
import java
.io
.OutputStream
;
import java
.net
.HttpURLConnection
;
import java
.net
.URL
;
@Slf4j
public class DownloadFileUtils {
    
    public static void downloadFile(String path
, String filename
,
                                    HttpServletRequest request
, HttpServletResponse response
) {
        InputStream inputStream 
= null
;
        OutputStream out 
= null
;
        HttpURLConnection conn 
= null
;
        try {
            URL url 
= new URL(path
);
            conn 
= (HttpURLConnection
) url
.openConnection();
            
            conn
.setConnectTimeout(3 * 1000);
            
            conn
.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            
            inputStream 
= conn
.getInputStream();
            out 
= response
.getOutputStream();
            response
.addHeader("Content-Disposition", "attachment;filename="
                    + new String(filename
.replaceAll(" ", "").getBytes("utf-8"),
                    "iso8859-1")); 
            response
.setContentType("application/octet-stream");  
            
            int b
;
            while ((b 
= inputStream
.read()) != -1) {
                out
.write(b
);
            }
        } catch (IOException e
) {
            log
.error("网络报错{}",e
);
        } finally {
            try {
                inputStream
.close();
                out
.close();
            } catch (IOException e
) {
                log
.error("关闭报错{}",e
);
            }
        }
    }
    
    public static byte[] readInputStream(InputStream inputStream
) throws IOException 
{
        byte[] buffer 
= new byte[1024];
        int len 
= 0;
        ByteArrayOutputStream bos 
= new ByteArrayOutputStream();
        while ((len 
= inputStream
.read(buffer
)) != -1) {
            bos
.write(buffer
, 0, len
);
        }
        bos
.close();
        return bos
.toByteArray();
    }
}