java ssh 服务器文件传输_java使用SFTP上传文件到资源服务器
本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下
首先得创建连接sftp服务器的公共类MySftp.java:
package cn.test.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class MySFTP {
/**
* 连接sftp服务器
* @param host 主机
* @param port 端口
* @param username 用户名
* @param password 密码
*/
public ChannelSftp connect(String host, int port, String username,
String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, host, port);
Session 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) {
}
return sftp;
}
/**
* 上传文件
*
* @param directory
* 上传的目录
* @param uploadFile
* 要上传的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载文件
*
* @param directory
* 下载目录
* @param downloadFile
* 下载的文件
* @param saveFile
* 存在本地的路径
* @param sftp
*/
public void download(String directory, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除文件
*
* @param directory
* 要删除文件所在目录
* @param deleteFile
* 要删除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
e.printStackTrace();
}
}
public void uploadSFTP(HttpServletRequest request,String[] uploadFiles) throws Exception {
MySFTP mySFTP = new MySFTP();
SFTPUtil sFTPUtil =new SFTPUtil();
ChannelSftp sftp = null;
Session session = null;
try {
sftp = mySFTP.connect(SystemConstants.SFTP_host, Integer.parseInt(SystemConstants.SFTP_port), SystemConstants.SFTP_username, SystemConstants.SFTP_password);
for (int i = 0; i < uploadFiles.length; i++) {
Date uploadTime = new Date();
String url=request.getSession().getServletContext().getRealPath("").replaceAll("\\\\", "/");
String uploadFile =url.substring(0, url.lastIndexOf("/"))+uploadFiles[i];
// String saveFile="";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(uploadTime);
String relativePath = ymd + "/";
String directory = SystemConstants.SFTP_directory+ relativePath;
sFTPUtil.createDir(directory, sftp);
mySFTP.upload(directory, uploadFile, sftp);
sftp.cd(directory);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(sftp != null) {
sftp.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if(session != null) {
session.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 列出目录下的文件
*
* @param directory
* 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/
@SuppressWarnings("rawtypes")
public Vector listFiles(String directory, ChannelSftp sftp)
throws SftpException {
return sftp.ls(directory);
}
}
上传图片时,调用SFTPUtil类中的uploadMultipartFile方法即可。
package cn.test.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import org.springframework.web.multipart.MultipartFile;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
/**文件上传工具类*/
public class SFTPUtil {
/**
* spring文件上传方法
* */
public static String uploadMultipartFile(MultipartFile file,String fileExt) {
SFTPUtil sFTPUtil =new SFTPUtil();
String originalFilename = file.getOriginalFilename();
//生成文件名
Date uploadTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(uploadTime);
String relativePath = ymd+"/";
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String fileName = df.format(uploadTime) + "_" + new Random().nextInt(1000) + "." + fileExt;
// String fileName = String.valueOf(new Date().getTime())+ new Random().nextInt(10000)+"."+originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
String directory=SystemConstants.SFTP_directory+relativePath;
ChannelSftp sftp =null;
Session session = null;
try {
MySFTP mySFTP = new MySFTP();
sftp = mySFTP.connect(SystemConstants.SFTP_host, Integer.parseInt(SystemConstants.SFTP_port), SystemConstants.SFTP_username, SystemConstants.SFTP_password);
session = sftp.getSession();
sFTPUtil.createDir(directory, sftp);
sftp.cd(directory);
sftp.put(file.getInputStream(), fileName);
sftp.disconnect();
sftp.getSession().disconnect();
} catch (Exception e) {
System.out.println("文件[" + originalFilename + "]上传失败,堆栈轨迹如下:");
e.printStackTrace();
}finally{
try {
if(sftp != null) {
sftp.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if(session != null) {
session.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
String reName=SystemConstants.SFTP_httpBaseUrl+relativePath+fileName;
return reName;
}
/**
* 创建目录
* @throws Exception
*/
public void createDir(String createpath, ChannelSftp sftp) throws Exception {
try {
if (isDirExist(sftp, createpath)) {
sftp.cd(createpath);
}
String pathArry[] = createpath.split("/");
StringBuffer filePath = new StringBuffer("/");
for (String path : pathArry) {
if (path.equals("")) {
continue;
}
filePath.append(path + "/");
if (isDirExist(sftp, filePath.toString())) {
sftp.cd(filePath.toString());
} else {
// 建立目录
sftp.mkdir(filePath.toString());
// 进入并设置为当前目录
sftp.cd(filePath.toString());
}
}
sftp.cd(createpath);
} catch (SftpException e) {
throw new Exception(e.getMessage());
}
}
/**
* 判断目录是否存在
*/
public boolean isDirExist(ChannelSftp sftp,String directory) {
boolean isDirExistFlag = false;
try {
SftpATTRS sftpATTRS = sftp.lstat(directory);
isDirExistFlag = true;
return sftpATTRS.isDir();
} catch (Exception e) {
if (e.getMessage().toLowerCase().equals("no such file")) {
isDirExistFlag = false;
}
}
return isDirExistFlag;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java ssh 服务器文件传输_java使用SFTP上传文件到资源服务器相关推荐
- java的sftp文件传输_java使用SFTP上传文件到资源服务器方法详解
java使用SFTP上传文件到资源服务器 本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类MySftp.java: p ...
- java sftp 上传文件_java使用SFTP上传文件到资源服务器
本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类MySftp.java: package cn.test.util; ...
- java sftp上传文件_Java通过sftp上传文件
Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作. 如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步,引入依赖包 com.jcraf ...
- java 上传文件服务_java代码实现上传文件到文档服务器、下载文档服务器文件
需要完成下载->修改->上传这三个步骤 平台有提供对应的api吗? /** 首先我们来理解下关于文档的api 文档相关api都在这2个package下面 package :com.just ...
- python第三方库文件传输_python3 post方式上传文件。
import requests url = 'http://www.test.com/doFile.php' #url = 'http://www.test.com/doPost.php' #file ...
- mac使用sftp上传文件夹
mac使用sftp上传文件夹 合并分卷文件 1.mac使用sftp上传文件夹 2.拆分.合并分卷文件 3.校验文件md5码 1.mac使用sftp上传文件夹 在win中有很多好用的ftp工具,但是在m ...
- java使用sftp上传(文件)图片到服务器中
最近租了一个服务器,想着上线个小项目,结果图片上传卡壳了,自从11号看了一篇文章就入了ftp的坑.研究了十多个小时的ftp文件传输,无果.睡前看到了一篇关于sftp上传文件的文章,抱着试一试的心态,结 ...
- sftp上传文件服务器,使用SFTP上传文件到服务器的简单使用
最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...
- 【便签纸】记录一次Linux服务器上通过sftp上传文件时的错误
背景:在Linux服务器上,通过sftp上传文件到远程服务器. 首先,需要登录远程服务器,格式是: sftp [服务器名]@[服务器地址] 然后,需要输入服务器密码: [服务器名]@[服务器地址]'s ...
最新文章
- 安全中间件与应用服务间如用session
- 开源erp_大公司为何使用开源ERP
- 利用python进行数据分析—8.数据清洗与准备
- layui根据name获取对象_python面向对象——学校学生教职工管理系统类的实例
- 精选了20个Python实战项目(附源码)
- QQ空间 自动点赞脚本
- 基于 Echarts 实现可视化数据大屏展示
- Linuxbt下载工具-Transmission-支持命令行!!!
- 人体的基本五行 - 心肝脾肺肾,金木水火土 对应关系与基础解读
- 文件服务器大量传送减负需要开启,网卡参数中的eee、流量控制、巨型帧、大量传输减负、中断节流率等名词都是什么意思doc.doc...
- 【优化模型】推销员问题模型
- Java num+=1、num++与num=num+1的区别(通俗易懂,附带例子)
- bugkuCTF之散乱的密文
- Adaboost算法的理解
- Spring AOP 切面@Around注解的具体使用
- 分享实录|区块链技术如何快速落地
- 第八章 win10+gsoap+onvif+ffmpeg
- php div 居中代码,用CSS实现DIV水平居中显示
- 中国高校教师跌入“社会底层”?
- js知道年月日怎么获取到是周几,和几月几号
热门文章
- skywalking源码--探针插件工程结构
- Google将推出Android手机版Voice应用程序
- Docker概述与基本使用
- 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)之间的转换
- 自学python接单_用Python在网上接单,兼职也可以月薪过万
- 转载:持续集成之解决jenkins内存溢出问题
- 编译filament
- [矩阵的QR分解系列四] QR(正交三角)分解
- String类的trim()方法之不能消除的空格
- [Google]google一些常用的搜索技巧探讨