博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器 下载远程地址服务器文件
阅读量:7083 次
发布时间:2019-06-28

本文共 3203 字,大约阅读时间需要 10 分钟。

/**     * 下载远程服务器文件     */        @RequestMapping("/download_file")    public void downloadFile(HttpServletRequest request,HttpServletResponse response){        OutputStream os = null;        ReadableByteChannel  rbc = null;        try{
//获取文件名 String fileExtName = "aa.jpg"; //根据条件得到文件路径 String fileurl = "http://d.hiphotos.baidu.com/zhidao/pic/item/0e2442a7d933c895623a9a8fd11373f0830200f9.jpg"; if(!fileExtName.equals("")){ os = response.getOutputStream(); log.info("===========文件路径==========="+fileurl); //获取远程文件 URL website = new URL(ConfigInfo.getString("file_server_path")+fileurl); //获取数据通道 rbc = Channels.newChannel(website.openStream()); //获得浏览器代理信息 final String userAgent = request.getHeader("USER-AGENT"); //判断浏览器代理并分别设置响应给浏览器的编码格式 String finalFileName = null; if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent,"Trident")){
//IE浏览器 finalFileName = URLEncoder.encode(fileExtName,"UTF8"); System.out.println("IE浏览器"); }else if(StringUtils.contains(userAgent, "Mozilla")){
//google,火狐浏览器 finalFileName = new String(fileExtName.getBytes(), "ISO8859-1"); }else{ finalFileName = URLEncoder.encode(fileExtName,"UTF8");//其他浏览器 } //设置HTTP响应头 response.reset();//重置 响应头 response.setContentType("application/x-download");//告知浏览器下载文件,而不是直接打开,浏览器默认为打开 response.addHeader("Content-Disposition" ,"attachment;filename=\"" +finalFileName+ "\"");//下载文件的名称 //读取数据 ByteBuffer bb = ByteBuffer.allocate(1024); int index = -1; // 循环取出流中的数据 while ((index = rbc.read(bb)) > 0){ if (index <= 0) { break; } bb.position(0); byte[] b = new byte[index]; bb.get(b); //将数据输出 os.write(b, 0, index); bb.clear();//缓冲区不会被自动覆盖,需要主动调用该方法 } }else{ log.info("找不到该文件!"); } }else{ log.info("参数异常!"); } }catch(MalformedURLException e){ e.printStackTrace(); log.debug("获取文件错误!", e); } catch (IOException e) { e.printStackTrace(); log.debug("下载异常!", e); }finally{ try { if(rbc != null){ rbc.close(); } if(os != null){ os.close(); } } catch (IOException e) { e.printStackTrace(); log.debug("流关闭异常!", e); } } }

 

转载于:https://www.cnblogs.com/start-fxw/p/7364164.html

你可能感兴趣的文章
.NET Compact Framework下的进程间通信之MSMQ开发
查看>>
MVVM 开发的几种模式讨论(WPF)
查看>>
Snipaste强大离线/在线截屏软件的下载、安装和使用
查看>>
Symbian C++ 开发环境配置[爱谁谁论坛]
查看>>
DIV层+CSS实现锁屏
查看>>
浅谈C/C++中的顺序点和副作用
查看>>
每周一书-《做自己-鬼脚七自媒体第一季》
查看>>
Visual Studio快速封装字段方法
查看>>
控制随机抽中几率 [ C# | Random ]
查看>>
(JAVA版)冒泡排序
查看>>
文明源自谎言
查看>>
ubuntu PATH 出错修复
查看>>
Bootstrap~页面的布局
查看>>
如何删除JAVA集合中的元素
查看>>
jQuery 事件 - trigger() 方法
查看>>
模态窗口被IE 7给糟蹋得不成样子了
查看>>
你不知道的Spring配置文件
查看>>
Spark源码分析之Spark-submit和Spark-class
查看>>
SOA系列之基本特性
查看>>
js中的"=="和equals()以及is()三者的区别
查看>>