欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java使用SFTP上传文件到资源服务器

程序员文章站 2024-03-04 08:32:29
本文实例为大家分享了java实现sftp上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类mysftp.java: pa...

本文实例为大家分享了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; 
 } 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。