java使用SFTP上传文件到资源服务器
程序员文章站
2024-03-02 15:29:34
本文实例为大家分享了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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。