java通过url下载文件并输出

controller:

@RequestMapping(value = "/{loanid}/{atmtType}")

    public void doGet(@PathVariable("loanid") String loanid,@PathVariable("atmtType") String atmtType,
            HttpServletRequest req,HttpServletResponse response) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("loanid", loanid);
        Map<String, String> urlByLoanid= new HashMap<String,String>();
    //    Map<String, String> urlByLoanid = zcmQueryInfoService.queryUrlByLoanid(map);
        try {
            if(urlByLoanid!=null){
                String wjurl="http://10.0.15.11:8080/gateway//nfs/marvel-core-admin/2017/10/11/compact_seal_17101119371231615_7.pdf";
                //String wjurl = urlByLoanid.get("url");
                int i = wjurl.lastIndexOf("/");
                String fileName = wjurl.substring(i+1);
                
                URL url = new URL(wjurl);    
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();    
                //设置超时间为3秒  
                conn.setConnectTimeout(3*1000);  
                //防止屏蔽程序抓取而返回403错误  
                conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
                //得到输入流  
                InputStream inputStream = conn.getInputStream();    
                //获取自己数组  
                byte[] bs = readInputStream(inputStream);
                response.setContentType("application/octet-stream;charset=ISO8859-1");
                BufferedOutputStream output = null;
                BufferedInputStream input = null;
                    try {
                        output = new BufferedOutputStream(response.getOutputStream());
                        // 中文文件名必须转码为 ISO8859-1,否则为乱码
                        String fileNameDown = new String(fileName.getBytes(), "ISO8859-1");
                        // 作为附件下载
                        response.setHeader("Content-Disposition", "attachment;filename=" + fileNameDown);
        
                        output.write(bs);
                        response.flushBuffer();
                    } catch (Exception e) {
                        log.error("Download log file error", e);
                    } // 用户可能取消了下载
                    finally {
                        if (input != null)
                            try {
                                input.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        if (output != null)
                            try {
                                output.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                    }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

/**
     * 从输入流中获取字节数组
     * @param inputStream
     * @return
     * @throws IOException
     */  
    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();    
    }   

此文为本人笔记,如有不懂,请谅解,欢迎qq交流:2483824604

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值