java使用JSch包进行上传图片到远程服务器

本文主要讲使用java进行上传图片到远程服务器

在最近一个项目上接触到一个上传图片的功能,主要是前段选择图片,点击上传,后台接收到图片进行连接到远程的服务器进行上传到指定的路径,中间使用了JSch包进行图片的上传以及连接服务器。遇到一个Kerberos口令控制台输入的问题,下面直接进入代码不多BB

pom文件

<dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.54</version>
</dependency>

工具类

import java.io.*;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Random;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import com.jcraft.jsch.*;
import com.jcraft.jsch.Session;
import org.springframework.web.multipart.MultipartFile;
public class UploadUtil {

    private static ChannelSftp sftp = null;
    //ftp服务器ip地址
    private static final String FTP_ADDRESS = "**.***.***.***";
    //端口号
    private static final int FTP_PORT = 22;
    //用户名
    private static final String FTP_USERNAME = "ftpuser";
    //密码
    private static final String FTP_PASSWORD = "*******";
    //图片路径
    public static final String FTP_BASEPATH = "/usr/local/data/pictures/HeadPortrait";
    //访问路径
    private static final String pathPrefix = "http://**.***.***.***/HeadPortrait/";

   /**
     * 上传图片到ftp服务器
     * @param file
     * @return
     * @throws IOException
     */
    public static String newFtpUpload(MultipartFile file) throws IOException {
        //获取到文件的文件名
        String fileName = file.getOriginalFilename();
        //根据文件名+UUID生产新的文件名
        String newFileName = UUID.randomUUID() + fileName;
        //从MultipartFile对象中获取流
        InputStream inputStream = file.getInputStream();
        //判断是否成功的boolean值
        boolean success = false;
        //返回值
        String path = "";
        //Session对象
        Session session = null;
        try {
            //创建JSch对象
            JSch jSch = new JSch();
            //调用JSch对象的getSession方法(参数是服务器的访问用户名,服务器访问路径,服务器的端口号)给session赋值
            session = jSch.getSession(FTP_USERNAME,FTP_ADDRESS,FTP_PORT);
            //给session对象设置密码参数也就是你的服务器访问的密码
            session.setPassword(FTP_PASSWORD);
            //创建参数
            Properties sshConfig = new Properties();
            //给参数对象赋值,这里解决
            sshConfig.put("StrictHostKeyChecking", "no");
            //这里设置参数给session主要解决把kerberos认证方式去掉,如果不写这一步走到这里你需要向控制台输入你的	    	    kerberos用户名和口令,如果你的项目环境没有涉及到kerberos应该是不用设置
            session.setConfig(
                    "PreferredAuthentications",
                    "publickey,keyboard-interactive,password");
            //把参数对象给session对象注入
            session.setConfig(sshConfig);
            //打开session连接
            session.connect(15000);
            //使用session对象连接服务器
            Channel channel = session.openChannel("sftp");
            channel.connect();
            sftp = (ChannelSftp) channel;
            //使用ChannelSftp对象进行使用命令
            //进入需要进入的路径
            sftp.cd(FTP_BASEPATH);
            //进行文件上传
            sftp.put(inputStream,newFileName);
            //设置上传成功
            success = true;
        } catch (JSchException e) {
            e.printStackTrace();
        } catch (SftpException e) {
            e.printStackTrace();
        } finally {
            //关闭连接
            if (sftp != null) {
                if (sftp.isConnected()) {
                    sftp.disconnect();
                }
            }
            //关闭session
            if (session != null) {
                if (session.isConnected()) {
                    session.disconnect();
                }
            }
        }
        //判断是否成功
        if(success){
            //设置返回路径为访问路径(你的服务器访问路径+新文件名)
            path = pathPrefix + newFileName;
        }
        return path;
    }
}

小结

第一次写博客大家多多担待,希望可以解决大家的问题
这里只有写入一个上传的方法,建议大家代码进行分离,把连接和上传分为两个部分,养成良好的代码习惯。

参考文档

//给JSch设置kerberos
https://stackoverflow.com/questions/29669459/skipping-kerberos-authentication-prompts-with-jsch
//使用JSch连接远程服务器详细方法(本文只写了文件上传方法)
https://blog.csdn.net/qq_17655941/article/details/80757814

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值