码迷,mamicode.com
首页 > 编程语言 > 详细

Java实现Sftp 下载 (有弹出窗)

时间:2017-08-10 13:23:56      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:com   direct   input   href   blog   端口   key   https   path   

    前文: 第一次写,不太会。大家多多包涵。

    最近的项目,有用到利用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 下载 (有弹出窗)

标签:com   direct   input   href   blog   端口   key   https   path   

原文地址:http://www.cnblogs.com/Bigcooler/p/7338377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!