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的弹出窗的打开次数吗? 怎么实现?

Java Selenium - 处理页面弹出窗

Java利用JSch实现sftp通过ssh上传下载删除文件及配置代码

wpf 右下角弹出窗

我的代码库-Java8实现FTP与SFTP文件上传下载

css动画从上到下弹出下载按钮