实例如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
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(); } |
以上这篇java通过url下载文件并输出的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/shshjj/article/details/78985223