分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

linus ??jsch上传文件

发布时间:2023-09-06 02:33责任编辑:苏小强关键词:js
package com.osplat.util;

import java.io.*;

import com.jcraft.jsch.*;
import com.osplat.bean.Resultmodel;
import org.springframework.web.multipart.MultipartFile;

/**
* @Company:wftdlx
* @Author: wjf
* @Description: linus 文件上传
* @Date: Created in 10:33 2019/2/14
*/
public class FtpsFileList {

//jar包
/*
<dependency>
???<groupId>com.jcraft</groupId>
???<artifactId>jsch</artifactId>
???<version>0.1.49</version>
</dependency>*/

//测试程序

/*@PostMapping("/uploadImage")
@ResponseBody
public Resultmodel uploadImage(@RequestParam MultipartFile file) {

???if (file==null) {
???????String msg="上传文件不能为空";
???????Log.info(msg);
???????return new Resultmodel(0,"上传失败");
???}
???Resultmodel resultmodel=null;
???try {
???????resultmodel = FtpsFileList.sshSftp(file);
???} catch (Exception e) {
???????System.out.println("上传失败"+e.getMessage());
???????return new Resultmodel(0,"上传失败");
???}
???Object fileName=resultmodel.getData();
???return new Resultmodel(0,"上传成功",fileName);
}*/

???public static String user = "root";
???public static String ip = "111.111.1.11";
???public static int port = 22;
???public static String psw = "123456";
???public static String uploadFileName = UuidUtil.get32UUID();


???/**
????* 利用JSch包实现SFTP下载、上传文件(用户名密码方式登陆)
????* <p>
????* ip ??主机IP
????* user 主机登陆用户名
????* psw ?主机登陆密码
????* port 主机ssh2登陆端口,如果取默认值(默认值22),传-1
????*/
???public static Resultmodel sshSftp(MultipartFile file) throws Exception {
???????Log.info("开始用户名密码方式登陆");
???????Session session = null;
???????JSch jsch = new JSch();

???????if (port <= 0) {
???????????//连接服务器,采用默认端口
???????????session = jsch.getSession(user, ip);
???????} else {
???????????//采用指定的端口连接服务器
???????????session = jsch.getSession(user, ip, port);
???????}

???????//如果服务器连接不上,则抛出异常
???????if (session == null) {
???????????throw new Exception("session is null");
???????}

???????//设置登陆主机的密码
???????session.setPassword(psw);//设置密码
???????session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
???????//设置第一次登陆的时候提示,可选值:(ask | yes | no)
???????session.setConfig("StrictHostKeyChecking", "no");
???????//设置登陆超时时间
???????session.connect(2000000);
???????String allName = uploadFileName + file.getOriginalFilename();
???????sftp(session, allName, file);//allName ?上传文件后重命名
???????Log.info("sftp成功");
???????return new Resultmodel(0, "文件上传成功", allName);
???}


???private static void sftp(Session session, String uploadFileName, MultipartFile file) throws Exception {


???????Channel channel = null;
???????try {
???????????//创建sftp通信通道
???????????channel = (Channel) session.openChannel("sftp");
???????????channel.connect(1000);
???????????ChannelSftp sftp = (ChannelSftp) channel;


???????????//进入服务器指定的文件夹
???????????sftp.cd("/home/numa/image");

???????????//列出服务器指定的文件列表
???????????/*Vector v = sftp.ls("*.txt");
???????????for (int i = 0; i < v.size(); i++) {
???????????????System.out.println(v.get(i));
???????????}*/
???????????//以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
???????????OutputStream outstream = sftp.put(uploadFileName);//上传文件重名

???????????//MultipartFile转File
???????????File f = null;
???????????try {
???????????????f = File.createTempFile("tmp", null);
???????????????file.transferTo(f);
???????????} catch (Exception e) {
???????????????e.printStackTrace();
???????????}

???????????//上传流
???????????InputStream instream = new FileInputStream(f);//上传文件内容
???????????byte b[] = new byte[1024];
???????????int n;
???????????while ((n = instream.read(b)) != -1) {
???????????????outstream.write(b, 0, n);
???????????}

???????????outstream.flush();
???????????outstream.close();
???????????instream.close();
???????} catch (Exception e) {
???????????e.printStackTrace();
???????????Log.error("文件上传util报错" + e.getMessage());
???????} finally {
???????????session.disconnect();
???????????channel.disconnect();
???????}
???}


???/**
????* 利用JSch包实现SFTP下载、上传文件(秘钥方式登陆)
????*
????* @param ip ????????主机IP
????* @param user ??????主机登陆用户名
????* @param port ??????主机ssh2登陆端口,如果取默认值(默认值22),传-1
????* @param privateKey 密钥文件路径
????* @param passphrase 密钥的密码
????*/
??/* public static void sshSftp2(String ip, String user
???????????, int port, String privateKey, String passphrase) throws Exception {
???????System.out.println("开始秘钥方式登陆");
???????Session session = null;

???????JSch jsch = new JSch();

???????//设置密钥和密码
???????//支持密钥的方式登陆,只需在jsch.getSession之前设置一下密钥的相关信息就可以了
???????if (privateKey != null && !"".equals(privateKey)) {
???????????if (passphrase != null && "".equals(passphrase)) {
???????????????//设置带口令的密钥
???????????????jsch.addIdentity(privateKey, passphrase);
???????????} else {
???????????????//设置不带口令的密钥
???????????????jsch.addIdentity(privateKey);
???????????}
???????}


???????if (port <= 0) {
???????????//连接服务器,采用默认端口
???????????session = jsch.getSession(user, ip);
???????} else {
???????????//采用指定的端口连接服务器
???????????session = jsch.getSession(user, ip, port);
???????}

???????//如果服务器连接不上,则抛出异常
???????if (session == null) {
???????????throw new Exception("session is null");
???????}

???????//设置第一次登陆的时候提示,可选值:(ask | yes | no)
???????session.setConfig("StrictHostKeyChecking", "no");
???????//设置登陆超时时间
???????session.connect(30000);

???????sftp(session, "bb.log");
???????System.out.println("sftp成功");
???}*/
}

linus ??jsch上传文件

原文地址:https://www.cnblogs.com/ynhk/p/10375207.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved