Java实现Sftp 下载 (有弹出窗)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现Sftp 下载 (有弹出窗)相关的知识,希望对你有一定的参考价值。
前文: 第一次写,不太会。大家多多包涵。
最近的项目,有用到利用sftp 下载文件,网上找了一圈资料:就是 JSch文件下载是通过调用ChannelSftp对象的get方法来实现的。(这是参考longyg 的博客)一般都是 get(文件名,保存地址) 这样是默默的走后台下载,没response,要想弹出框的那就要 response.getOutputStream().write(buffer);
效果就是我们普通下载的那样,弹出框 询问保存位置。(如果你的浏览器设置了话,浏览器对下载的操作,一是询问保存位置,二是 下载完成打开文件。看你们自己的设置)
我们项目框架是dubbo+springMVC+Spring+Mybatis
controller层 /** * 下载日志文件 */ @RequestMapping(value = "/download", method = RequestMethod.GET) @ResponseBody public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception { SftpUtils sftp = new SftpUtils(host,22,account, pwd);//虚拟机测试 这里你们写自己的参数 byte[] buffer = sftp.download(logfileloadPath, fileName); response.reset(); response.setContentType("text/plain;charset=utf-8");//文本格式 if(request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0){ //处理IE 的头部信息 response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName,Charsets.UTF_8.toString())); }else{ //处理其他的头部信息 response.setHeader("content-disposition", "attachment;filename="+new String(fileName.getBytes(Charsets.UTF_8), Charsets.ISO_8859_1)); } response.getOutputStream().write(buffer); }
SftpUtil 工具类 public class SftpUtils { protected String host; protected int port; protected String username; protected String password; /** * @param host ip * @param port 端口 * @param username 账号 * @param password 密码 * */ public SftpUtils(String host, int port, String username, String password) { set(host, port, username, password); } public void set(String host, int port, String username, String password) { this.host = host; this.port = port; this.username = username; this.password = password; } Session sshSession = null ; /** * 链接linux * */ public ChannelSftp connect() { ChannelSftp sftp = null ; try { JSch jsch = new JSch(); jsch.getSession(username, host, port); sshSession = jsch.getSession(username, host, port); sshSession.setPassword(password); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect(); Channel channel = sshSession.openChannel("sftp"); channel.connect() ; sftp = (ChannelSftp) channel; } catch (Exception e) { close( null ); return null ; } return sftp; } /** * 通过SFTP下载文件 * * @Title: download * @param directory * @param downloadFile * @param saveDirectory * @throws Exception * @retrun void * @author wangqinghua * @date 2015-9-24 下午1:56:22 */ public byte[] download(String directory, String downloadFile) throws Exception { ChannelSftp sftp = connect(); sftp.cd(directory); InputStream is = sftp.get(downloadFile); byte[] buffer = inputStreamToByte(is); is.close(); close(sftp); return buffer; } /** * InputStream转换为byte[] * @param is * @return byte[] * @throws IOException */ private byte [] inputStreamToByte(InputStream is) throws IOException { ByteArrayOutputStream bAOutputStream = new ByteArrayOutputStream(); int ch; while((ch = is.read() ) != -1){ bAOutputStream.write(ch); } byte data [] =bAOutputStream.toByteArray(); bAOutputStream.close(); return data; } public void close(ChannelSftp sftp){ if(sftp!=null){ sftp.disconnect() ; sftp.exit(); } if(sshSession!=null){ sshSession.disconnect(); } } }
js层:
<a class=‘detail link1 color-blue‘ href=/logDetail/download?fileName="fileName" //这个fileName你们要自己获取 onclick=‘window.location.href=this.href;return false;‘>下载</a>
以上是关于Java实现Sftp 下载 (有弹出窗)的主要内容,如果未能解决你的问题,请参考以下文章
百度统计 可以统计页面上的JS的弹出窗的打开次数吗? 怎么实现?