本文实例为大家分享了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上传文件到资源服务器相关推荐

  1. java的sftp文件传输_java使用SFTP上传文件到资源服务器方法详解

    java使用SFTP上传文件到资源服务器 本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类MySftp.java: p ...

  2. java sftp 上传文件_java使用SFTP上传文件到资源服务器

    本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类MySftp.java: package cn.test.util; ...

  3. java sftp上传文件_Java通过sftp上传文件

    Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作. 如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步,引入依赖包 com.jcraf ...

  4. java 上传文件服务_java代码实现上传文件到文档服务器、下载文档服务器文件

    需要完成下载->修改->上传这三个步骤 平台有提供对应的api吗? /** 首先我们来理解下关于文档的api 文档相关api都在这2个package下面 package :com.just ...

  5. python第三方库文件传输_python3 post方式上传文件。

    import requests url = 'http://www.test.com/doFile.php' #url = 'http://www.test.com/doPost.php' #file ...

  6. mac使用sftp上传文件夹

    mac使用sftp上传文件夹 合并分卷文件 1.mac使用sftp上传文件夹 2.拆分.合并分卷文件 3.校验文件md5码 1.mac使用sftp上传文件夹 在win中有很多好用的ftp工具,但是在m ...

  7. java使用sftp上传(文件)图片到服务器中

    最近租了一个服务器,想着上线个小项目,结果图片上传卡壳了,自从11号看了一篇文章就入了ftp的坑.研究了十多个小时的ftp文件传输,无果.睡前看到了一篇关于sftp上传文件的文章,抱着试一试的心态,结 ...

  8. sftp上传文件服务器,使用SFTP上传文件到服务器的简单使用

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...

  9. 【便签纸】记录一次Linux服务器上通过sftp上传文件时的错误

    背景:在Linux服务器上,通过sftp上传文件到远程服务器. 首先,需要登录远程服务器,格式是: sftp [服务器名]@[服务器地址] 然后,需要输入服务器密码: [服务器名]@[服务器地址]'s ...

最新文章

  1. 安全中间件与应用服务间如用session
  2. 开源erp_大公司为何使用开源ERP
  3. 利用python进行数据分析—8.数据清洗与准备
  4. layui根据name获取对象_python面向对象——学校学生教职工管理系统类的实例
  5. 精选了20个Python实战项目(附源码)
  6. QQ空间 自动点赞脚本
  7. 基于 Echarts 实现可视化数据大屏展示
  8. Linuxbt下载工具-Transmission-支持命令行!!!
  9. 人体的基本五行 - 心肝脾肺肾,金木水火土 对应关系与基础解读
  10. 文件服务器大量传送减负需要开启,网卡参数中的eee、流量控制、巨型帧、大量传输减负、中断节流率等名词都是什么意思doc.doc...
  11. 【优化模型】推销员问题模型
  12. Java num+=1、num++与num=num+1的区别(通俗易懂,附带例子)
  13. bugkuCTF之散乱的密文
  14. Adaboost算法的理解
  15. Spring AOP 切面@Around注解的具体使用
  16. 分享实录|区块链技术如何快速落地
  17. 第八章 win10+gsoap+onvif+ffmpeg
  18. php div 居中代码,用CSS实现DIV水平居中显示
  19. 中国高校教师跌入“社会底层”?
  20. js知道年月日怎么获取到是周几,和几月几号

热门文章

  1. skywalking源码--探针插件工程结构
  2. Google将推出Android手机版Voice应用程序
  3. Docker概述与基本使用
  4. 驼峰命名法(CamelCase)和下划线命名法(UnderScoreCase)之间的转换
  5. 自学python接单_用Python在网上接单,兼职也可以月薪过万
  6. 转载:持续集成之解决jenkins内存溢出问题
  7. 编译filament
  8. [矩阵的QR分解系列四] QR(正交三角)分解
  9. String类的trim()方法之不能消除的空格
  10. [Google]google一些常用的搜索技巧探讨