广告
返回顶部
首页 > 资讯 > 精选 >springboot怎么读取sftp的文件
  • 752
分享到

springboot怎么读取sftp的文件

2023-06-25 16:06:40 752人浏览 独家记忆
摘要

这篇文章主要介绍SpringBoot怎么读取sftp的文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot读取sftp的文件1.添加pom依赖(基于springboot项目)<dependen

这篇文章主要介绍SpringBoot怎么读取sftp的文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    springboot读取sftp的文件

    1.添加pom依赖(基于springboot项目

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

    2.application.yaml配置文件

    sftp:   ip: 192.168.1.102   port: 22   username: admin   passWord: admin   root: /img #文件根目录

    3.工具

    import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.Session;import com.jcraft.jsch.SftpException;import lombok.extern.slf4j.Slf4j; import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Properties;import java.util.concurrent.TimeUnit; @Slf4jpublic class SFTPUtil {         private static final int DOWNLOAD_RETRY = 3;         private static final long DOWNLOAD_SLEEP = 3 * 1000;     private static final SFTPUtil SFTP = new SFTPUtil();    private static ChannelSftp client;    private static Session session;         public static SFTPUtil getInstance() {        return SFTP;    }         synchronized public ChannelSftp makeConnection(String username, String password, String ip, int port) {        if (client == null || session == null || !client.isConnected() || !session.isConnected()) {            try {                JSch jsch = new JSch();                session = jsch.getSession(username, ip, port);                if (password != null) {                    session.setPassword(password);                }                Properties config = new Properties();                // 设置第一次登陆的时候主机公钥确认提示,可选值:(ask | yes | no)                config.put("StrictHosTKEyChecking", "no");                session.setConfig(config);                session.connect();                //sftp协议                Channel channel = session.openChannel("sftp");                channel.connect();                client = (ChannelSftp) channel;                log.info("sftp connected success,connect to [{}:{}], username [{}]", ip, port, username);            } catch (JSchException e) {                log.error("sftp connected fail,connect to [{}:{}], username [{}], password [{}], error message : [{}]", ip, port, username, password, e.getMessage());            }         }        return client;    }         public static void close() {        if (client != null && client.isConnected()) {            client.disconnect();        }        if (session != null && session.isConnected()) {            session.disconnect();        }     }         public synchronized static File download(String downloadFile, String saveFile, String ip, Integer port, String username, String password, String rootPath) {        boolean result = false;        File file = null;        Integer i = 0;        while (!result) {            //获取连接            ChannelSftp sftp = getInstance().makeConnection(username, password, ip, port);            FileOutputStream fileOutputStream = null;            log.info("sftp file download start, target filepath is {}, save filepath is {}", downloadFile, saveFile);            try {                sftp.cd(rootPath);                file = new File(saveFile);                if (file.exists()) {                    file.delete();                } else {                    file.createNewFile();                }                fileOutputStream = new FileOutputStream(file);                sftp.get(downloadFile, fileOutputStream);                result = true;            } catch (FileNotFoundException e) {                log.error("sftp file download fail, FileNotFound: [{}]", e.getMessage());            } catch (IOException e) {                log.error("sftp file download fail, IOException: [{}]", e.getMessage());            } catch (SftpException e) {                i++;                log.error("sftp file download fail, sftpException: [{}]", e.getMessage());                if (i > DOWNLOAD_RETRY) {                    log.error("sftp file download fail, retry three times, SftpException: [{}]", e.getMessage());                    return file;                }                try {                    TimeUnit.MILLISECONDS.sleep(DOWNLOAD_SLEEP);                } catch (InterruptedException ex) {                    ex.printStackTrace();                }            } finally {                try {                    fileOutputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            SFTPUtil.close();         }        return file;    }         public synchronized static File download(String downloadFile, String saveFile, String rootPath) {        boolean result = false;        File file = null;        Integer i = 0;        while (!result) {            FileOutputStream fileOutputStream = null;            log.info("sftp file download start, target filepath is {}, save filepath is {}", downloadFile, saveFile);            try {                //获取连接、读取文件(ChannelSftp) session.openChannel("sftp")                client.cd(rootPath);                file = new File(saveFile);                if (file.exists()) {                    file.delete();                } else {                    file.createNewFile();                }                fileOutputStream = new FileOutputStream(file);                client.get(downloadFile, fileOutputStream);                result = true;            } catch (FileNotFoundException e) {                log.error("sftp file download fail, FileNotFound: [{}]", e.getMessage());            } catch (IOException e) {                log.error("sftp file download fail, IOException: [{}]", e.getMessage());            } catch (SftpException e) {                i++;                log.error("sftp file download fail, sftpException: [{}]", e.getMessage());                if (i > DOWNLOAD_RETRY) {                    log.error("sftp file download fail, retry three times, SftpException: [{}]", e.getMessage());                    return file;                }                try {                    TimeUnit.MILLISECONDS.sleep(DOWNLOAD_SLEEP);                } catch (InterruptedException ex) {                    ex.printStackTrace();                }            } finally {                try {                    if (fileOutputStream != null) {                        fileOutputStream.close();                    }                } catch (IOException e) {                    e.printStackTrace();                }            }         }        return file;    }  }

    4.实际调用

    public class SFTP {     @Value("${sftp.ip}")    String ip;     @Value("${sftp.port}")    Integer port;     @Value("${sftp.username}")    String username;     @Value("${sftp.password}")    String password;     @Value("${sftp.root}")    String rootPath;      @GetMapping("/test")    public void test() throws IOException {        SFTPUtil.getInstance().makeConnection(username, password, ip, port);        File file= SFTPUtil.download(downloadFilePath, "1.txt", rootPath);        SFTPUtil.close();        InputStreamReader read = null;        BufferedReader bufferedReader = null;        String encoding = "utf-8";        try {            read = new InputStreamReader(new FileInputStream(file), encoding);            bufferedReader = new BufferedReader(read);            String lineTxt = null;            while ((lineTxt = bufferedReader.readLine()) != null) {                log.info("[{}] downfile is [{}] ", username, lineTxt);                }            read.close();            bufferedReader.close();            file.delete();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                if (read != null) {                    read.close();                }                if (bufferedReader != null) {                    bufferedReader.close();                }                if (file != null && file.exists()) {                    file.delete();                }            } catch (IOException e) {                e.printStackTrace();            }        }     }  }

    springboot使用SFTP文件上传

    最近在工作功能使用了sftp做文件上传下载的功能,在这里简单的记录一下

    pom文件中引入相关的jar

    <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->        <dependency>            <groupId>com.jcraft</groupId>            <artifactId>jsch</artifactId>            <version>0.1.54</version>        </dependency>

    建立springboot项目,在application.properties添加如下配置

    sftp.ip=127.0.0.1sftp.port=22sftp.username=xuyysftp.password=paswpord#ftp根目录sftp.rootpath="D:SFTP/

    上面一sftp开头的都是自定义配置,需要写个配置类读取一下,自动注入到springboot中

    package com.uinnova.ftpsynWEB.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@Component@ConfigurationProperties(prefix = "sftp")@Datapublic class SftpConfig {    public static String ip;    public static Integer port;    public static String username;    public static String password;    public static String rootpath; //注意这里是 static 修饰,便于sftputil直接取值    public static String getIp() {        return ip;    }    public void setIp(String ip) {        SftpConfig.ip = ip;    }    public static Integer getPort() {        return port;    }    public void setPort(Integer port) {        SftpConfig.port = port;    }    public static String getUsername() {        return username;    }    public void setUsername(String username) {        SftpConfig.username = username;    }    public static String getPassword() {        return password;    }    public void setPassword(String password) {        SftpConfig.password = password;    }    public static String getRootpath() {        return rootpath;    }    public void setRootpath(String rootpath) {        SftpConfig.rootpath = rootpath;    }}

    下面是具体的工具类,代码写的比较简单,可以自己下载优化一下,等我有时间在优化

    package com.uinnova.ftpsynweb.util;import com.jcraft.jsch.*;import com.uinnova.ftpsynweb.config.SftpConfig;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.thymeleaf.util.StringUtils;import javax.transaction.SystemException;import java.io.*;import java.util.*;@Slf4j@Componentpublic class SftpUtil {    @Autowired    SftpConfig sftpConfig;    private static String sftp_ip = SftpConfig.getIp();    private static Integer sftp_port = SftpConfig.getPort();    private static String sftp_username = SftpConfig.getUsername();    private static String sftp_password = SftpConfig.getPassword();        public static String windows_path = "D:SFTP/";    public static String linux_path = "/home/xuyy/";    private Session session;    private ChannelSftp channel;        private volatile static ThreadLocal<SftpUtil> sftpLocal = new ThreadLocal<>();    private SftpUtil() {    }    private SftpUtil(String host, Integer port, String username, String password) {        super();        init(host, port, username, password);    }        public static SftpUtil getSftpUtil() {        SftpUtil sftpUtil = sftpLocal.get();        if (null == sftpUtil || !sftpUtil.isConnected()) {            sftpLocal.set(new SftpUtil(sftp_ip, sftp_port, sftp_username, sftp_password));        }        return sftpLocal.get();    }        public static SftpUtil getSftpUtil(String host, Integer port, String username, String password) {        SftpUtil sftpUtil = sftpLocal.get();        if (null == sftpUtil || !sftpUtil.isConnected()) {            log.info("建立连接");            sftpLocal.set(new SftpUtil(host, port, username, password));        } else {            log.info("连接已经存在");        }        return sftpLocal.get();    }        private void init(String host, Integer port, String username, String password) {        try {            //场景JSch对象            JSch jSch = new JSch();            // jsch.addIdentity(); 私钥            session = jSch.getSession(username, host, port);            // 第一次登陆时候提示, (ask|yes|no)            Properties config = new Properties();            config.put("StrictHostKeyChecking", "no");            config.put("compression.s2c", "zlib,none");            config.put("compression.c2s", "zlib,none");            session.setConfig(config);            //设置超时//            session.setTimeout(10*1000);            //设置密码            session.setPassword(password);            session.connect();            //打开SFTP通道            channel = (ChannelSftp) session.openChannel("sftp");            //建立SFTP通道的连接            channel.connect();            // 失败重试2次  失败不管了,只发送一次 失败回复  并行调用所有节点        } catch (JSchException e) {            log.error("init话sftp异常,可能是获得连接错误,请检查用户名密码或者重启sftp服务" + e);        }    }        private boolean isConnected() {        return null != channel && channel.isConnected();    }        public void closeChannel() {        if (null != channel) {            try {                channel.disconnect();            } catch (Exception e) {                log.error("关闭SFTP通道发生异常:", e);            }        }        if (null != session) {            try {                session.disconnect();            } catch (Exception e) {                log.error("SFTP关闭 session异常:", e);            }        }    }        public static void release() {        if (null != sftpLocal.get()) {            sftpLocal.get().closeChannel();            sftpLocal.set(null);        }    }        public List list(String dir) {        if (channel == null) {            log.error("获取sftp连接失败,请检查" + sftp_ip + +sftp_port + "@" + sftp_username + "  " + sftp_password + "是否可以访问");            return null;        }        Vector<ChannelSftp.LsEntry> files = null;        try {            files = channel.ls(dir);        } catch (SftpException e) {            log.error(e.getMessage());        }        if (null != files) {            List fileNames = new ArrayList<String>();            Iterator<ChannelSftp.LsEntry> iter = files.iterator();            while (iter.hasNext()) {                String fileName = iter.next().getFilename();                if (StringUtils.equals(".", fileName) || StringUtils.equals("..", fileName)) {                    continue;                }                fileNames.add(fileName);            }            return fileNames;        }        return null;    }        public List listDetail(String dir) {        if (channel == null) {            log.error("获取sftp连接失败,请检查" + sftp_ip + +sftp_port + "@" + sftp_username + "  " + sftp_password + "是否可以访问");            return null;        }        Vector<ChannelSftp.LsEntry> files = null;        try {            files = channel.ls(dir);        } catch (SftpException e) {            log.error("listDetail 获取目录列表 channel.ls " + dir + "失败 " + e);        }        if (null != files) {            List<Map<String, String>> fileList = new ArrayList<>();            Iterator<ChannelSftp.LsEntry> iter = files.iterator();            while (iter.hasNext()) {                ChannelSftp.LsEntry next = iter.next();                Map<String, String> map = new HashMap<>();                String fileName = next.getFilename();                if (StringUtils.equals(".", fileName) || StringUtils.equals("..", fileName)) {                    continue;                }                String size = String.valueOf(next.getAttrs().getSize());                long mtime = next.getAttrs().getMTime();                String type = "";                String longname = String.valueOf(next.getLongname());                if (longname.startsWith("-")) {                    type = "file";                } else if (longname.startsWith("d")) {                    type = "dir";                }                map.put("name", fileName);                map.put("size", size);                map.put("type", type);                map.put("mtime", DateTimeUtil.timestampToDate(mtime));                fileList.add(map);            }            return fileList;        }        return null;    }        public List<String> listOfRecursion(String path, List<String> list) throws SftpException {        if (channel == null) {            log.error("获取sftp连接失败,请检查" + sftp_ip + +sftp_port + "@" + sftp_username + "" + sftp_password + "是否可以访问");            return null;        }        Vector<ChannelSftp.LsEntry> files = null;        files = channel.ls(path);        for (ChannelSftp.LsEntry entry : files) {            if (!entry.getAttrs().isDir()) {                String str = path + "/" + entry.getFilename();                str = str.replace("//", "/");                list.add(str);            } else {                if (!entry.getFilename().equals(".") && !entry.getFilename().equals("..")) {                    listOfRecursion(path + "/" + entry.getFilename(), list);                }            }        }        log.debug(list.toString());        return list;    }        public void upload(File file, String remotePath) throws SystemException {        if (channel == null) {            log.error("获取sftp连接失败,请检查" + sftp_ip + +sftp_port + "@" + sftp_username + "" + sftp_password + "是否可以访问");        }        FileInputStream fileInputStream = null;        try {            if (file.isFile()) {                String rpath = remotePath;//服务器要创建的目录                try {                    createDir(rpath);                } catch (Exception e) {                    throw new SystemException("创建路径失败:" + rpath);                }                channel.cd(remotePath);                System.out.println(remotePath);                fileInputStream = new FileInputStream(file);                channel.put(fileInputStream, file.getName());            }        } catch (FileNotFoundException e) {            throw new SystemException("上传文件没有找到");        } catch (SftpException e) {            throw new SystemException("上传ftp服务器错误");        } finally {            try {                if (fileInputStream != null) {                    fileInputStream.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }        public boolean upload(File file, String remoteName, String remotePath) {        if (channel == null) {            System.out.println("get sftp connect fail,please reboot sftp client");            log.error("获取sftp连接失败,请检查" + sftp_ip + +sftp_port + "@" + sftp_username + "" + sftp_password + "是否可以访问");        } else {            FileInputStream fileInputStream = null;            try {                if (file.isFile()) {                    //服务器要创建的目录                    String rpath = remotePath;                    createDir(rpath);                    channel.cd(remotePath);                    log.error(remotePath + "  " + remoteName);                    fileInputStream = new FileInputStream(file);                    channel.put(fileInputStream, remoteName);                    return true;                }            } catch (FileNotFoundException e) {                log.error("上传文件没有找到", e.getMessage());                return false;            } catch (SftpException e) {                log.error("upload" + remotePath + e);                return false;            } finally {                try {                    if (fileInputStream != null) {                        fileInputStream.close();//这里要关闭文件流                    } else {                        log.error("流不存在" + remotePath + "  " + remoteName);                    }                } catch (IOException e) {                    e.printStackTrace();                }                // try to delete the file immediately//                boolean deleted = false;//                try {//                    deleted = file.delete();//                } catch (SecurityException e) {//                    log.error(e.getMessage());//                }//                // else delete the file when the program ends//                if (deleted) {//                    System.out.println("Temp file deleted.");//                    log.info("Temp file deleted.");//                } else {//                    file.deleteOnExit();//                    System.out.println("Temp file scheduled for deletion.");//                    log.info("Temp file scheduled for deletion.");//                }            }        }        return false;    }    public boolean upload(InputStream inputStream, String remoteName, String remotePath) {        if (channel == null) {            log.error("获取sftp连接失败,请检查" + sftp_ip + +sftp_port + "@" + sftp_username + "" + sftp_password + "是否可以访问");        } else {            try {                //服务器要创建的目录                String rpath = remotePath;                createDir(rpath);                channel.cd(remotePath);                log.debug(remotePath + "  " + remoteName);                channel.put(inputStream, remoteName);                return true;            } catch (SftpException e) {                log.error("upload路径不存在" + remotePath + e);                return false;            } finally {                try {                    if (inputStream != null) {                        inputStream.close();//这里要关闭文件流                    } else {                        log.error("流不存在" + remotePath + "  " + remoteName);                    }                } catch (IOException e) {                    log.error(e.getMessage());                }                // try to delete the file immediately//                boolean deleted = false;//                try {//                    deleted = file.delete();//                } catch (SecurityException e) {//                    log.error(e.getMessage());//                }//                // else delete the file when the program ends//                if (deleted) {//                    System.out.println("Temp file deleted.");//                    log.info("Temp file deleted.");//                } else {//                    file.deleteOnExit();//                    System.out.println("Temp file scheduled for deletion.");//                    log.info("Temp file scheduled for deletion.");//                }            }        }        return false;    }        public File downFile(String rootDir, String filePath) {        if (channel == null) {            log.error("获取sftp连接失败,请检查" + sftp_ip + +sftp_port + "@" + sftp_username + "  " + sftp_password + "是否可以访问");            return null;        }        OutputStream outputStream = null;        File file = null;        try {            channel.cd(rootDir);            String folder = System.getProperty("java.io.tmpdir");            file = new File(folder + File.separator + filePath.substring(filePath.lastIndexOf("/") + 1));//            file = new File(filePath.substring(filePath.lastIndexOf("/") + 1));            outputStream = new FileOutputStream(file);            channel.get(filePath, outputStream);        } catch (SftpException e) {            log.error("downFile" + filePath + e);            file = null;        } catch (FileNotFoundException e) {            log.error("FileNotFoundException", e);            file = null;        } finally {            if (outputStream != null) {                try {                    outputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return file;    }        public void createDir(String createpath) {        try {            if (isDirExist(createpath)) {                this.channel.cd(createpath);                return;            }            String pathArry[] = createpath.split("/");            StringBuffer filePath = new StringBuffer("/");            for (String path : pathArry) {                if (path.equals("")) {                    continue;                }                filePath.append(path + "/");                if (isDirExist(filePath.toString())) {                    channel.cd(filePath.toString());                } else {                    // 建立目录                    channel.mkdir(filePath.toString());                    // 进入并设置为当前目录                    channel.cd(filePath.toString());                }            }            this.channel.cd(createpath);        } catch (SftpException e) {            log.error("createDir" + createpath + e);        }    }        public boolean isDirExist(String directory) {        boolean isDirExistFlag = false;        try {            SftpATTRS sftpATTRS = channel.lstat(directory);            isDirExistFlag = true;            return sftpATTRS.isDir();        } catch (Exception e) {            if (e.getMessage().toLowerCase().equals("no such file")) {                isDirExistFlag = false;            }        }        return isDirExistFlag;    }    static String PS = "/";        public void recursiveFolderDownload(String sourcePath, String destinationPath) throws SftpException {        Vector<ChannelSftp.LsEntry> fileAndFolderList = channel.ls(sourcePath); // Let list of folder content        //Iterate through list of folder content        for (ChannelSftp.LsEntry item : fileAndFolderList) {            if (!item.getAttrs().isDir()) { // Check if it is a file (not a directory).                if (!(new File(destinationPath + PS + item.getFilename())).exists()                        || (item.getAttrs().getMTime() > Long                        .valueOf(new File(destinationPath + PS + item.getFilename()).lastModified()                                / (long) 1000)                        .intValue())) { // Download only if changed later.                    new File(destinationPath + PS + item.getFilename());                    channel.get(sourcePath + PS + item.getFilename(),                            destinationPath + PS + item.getFilename()); // Download file from source (source filename, destination filename).                }            } else if (!(".".equals(item.getFilename()) || "..".equals(item.getFilename()))) {                new File(destinationPath + PS + item.getFilename()).mkdirs(); // Empty folder copy.                recursiveFolderDownload(sourcePath + PS + item.getFilename(),                        destinationPath + PS + item.getFilename()); // Enter found folder on server to read its contents and create locally.            }        }    }        public void createFolder(String folder) {        SftpATTRS stat = null;        try {            stat = channel.stat(folder);        } catch (SftpException e) {            log.error("复制目的地文件夹" + folder + "不存在,创建");        }        if (stat == null) {            try {                channel.mkdir(folder);            } catch (SftpException e) {                log.error("创建失败", e.getCause());            }        }    }    public InputStream get(String filePath) {        InputStream inputStream = null;        try {            inputStream = channel.get(filePath);        } catch (SftpException e) {            log.error("get" + e);        }        return inputStream;    }    public void put(InputStream inputStream, String filePath) {        try {            channel.put(inputStream, filePath);        } catch (SftpException e) {            log.error("put" + e);        }    }    public Vector<ChannelSftp.LsEntry> ls(String filePath) {        Vector ls = null;        try {            ls = channel.ls(filePath);        } catch (SftpException e) {            log.error("ls" + e);        }        return ls;    }        public void copy(String src, String desc) {//        检查目的文件存在与否,不存在则创建        this.createDir(desc);//        查看源文件列表        Vector<ChannelSftp.LsEntry> fileAndFolderList = this.ls(src);        for (ChannelSftp.LsEntry item : fileAndFolderList) {            if (!item.getAttrs().isDir()) {//是一个文件                try (InputStream tInputStream = this.get(src + PS + item.getFilename());                     ByteArrayOutputStream baos = new ByteArrayOutputStream()                ) {                    byte[] buffer = new byte[1024];                    int len;                    while ((len = tInputStream.read(buffer)) > -1) {                        baos.write(buffer, 0, len);                    }                    baos.flush();                    InputStream nInputStream = new ByteArrayInputStream(baos.toByteArray());                    this.put(nInputStream, desc + PS + item.getFilename());                } catch (IOException e) {                    log.error(e.getMessage());                }                // 排除. 和 ..            } else if (!(".".equals(item.getFilename()) || "..".equals(item.getFilename()))) {//                创建文件,可能不需要                this.createFolder(desc + PS + item.getFilename());                //递归复制文件                copy(src + PS + item.getFilename(), desc + PS + item.getFilename());            }        }    }        public Boolean del(String filePath) {        boolean flag = false;        try {            channel.rm(filePath);            flag = true;        } catch (SftpException e) {            flag = false;            log.error("删除文件错误报告: " + e);        }        return flag;    }}

    下面是具体的几个接口,这里也贴出来了,方便大家使用

    @Slf4j@RestControllerpublic class FileController {        @RequestMapping(value = "/file/upload")    @ResponseBody    public Return upload(@RequestParam("file") MultipartFile file, String targetPath, String fileName) throws IOException {        log.debug("上传文件原始名字:" + file.getOriginalFilename() + "上传路径:" + targetPath + "上传文件名: " + fileName);        InputStream uploadFile = file.getInputStream();        SftpUtil sftpUtil = SftpUtil.getSftpUtil();        boolean upload = false;        if (SftpConfig.WIN.equals(SftpConfig.getEnv())) {            upload = sftpUtil.upload(uploadFile, fileName, targetPath);        } else {            upload = sftpUtil.upload(uploadFile, fileName, SftpConfig.getRootpath() + targetPath);        }        SftpUtil.release();        return Return.Ok(upload);    }        @RequestMapping(value = "/file/download")    @ResponseBody    public void download(String targetPath, HttpServletResponse response) throws UnsupportedEncodingException {        log.debug("下载文件名字" + targetPath);//        targetPath = new String(targetPath.getBytes("ISO8859-1"), "UTF-8");        if (StringUtils.isEmpty(targetPath) || !targetPath.contains("/")) {            log.error("下载路径不正确" + targetPath);//            return Return.Fail("下载路径不正确");        }        String fileName = targetPath.substring(targetPath.lastIndexOf("/") + 1);        log.debug(fileName);        File file = null;        SftpUtil sftpUtil = SftpUtil.getSftpUtil();        if (SftpConfig.WIN.equals(SftpConfig.getEnv())) {            file = sftpUtil.downFile("/", targetPath);        } else {            file = sftpUtil.downFile("/", SftpConfig.getRootpath() + targetPath);        }        SftpUtil.release();        if (!Objects.isNull(file)) {            // 配置文件下载            response.setHeader("content-type", "application/octet-stream");            response.setContentType("application/octet-stream");            // 下载文件能正常显示中文//            response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));            byte[] buffer = new byte[1024];            FileInputStream fis = null;            BufferedInputStream bis = null;            try {                fis = new FileInputStream(file);                bis = new BufferedInputStream(fis);                OutputStream os = response.getOutputStream();                int i = bis.read(buffer);                while (i != -1) {                    os.write(buffer, 0, i);                    i = bis.read(buffer);                }//                return Return.Ok("下载成功");            } catch (Exception e) {                log.error("down fail" + e);//                return Return.Fail("下載失敗");            } finally {                if (bis != null) {                    try {                        bis.close();                    } catch (IOException e) {                        log.error("down fail" + e);                    }                }                if (fis != null) {                    try {                        fis.close();                    } catch (IOException e) {                        log.error("down fail" + e);                    }                }            }        }//        return Return.Fail("下載失敗");    }        @RequestMapping(value = "/file/list")    @ResponseBody    public Return list(@RequestParam("filePath") String filePath) {        log.debug("获取路径下列表 :{}", filePath);        SftpUtil sftpUtil = SftpUtil.getSftpUtil();        List<String> list = new ArrayList();        if (SftpConfig.WIN.equals(SftpConfig.getEnv())) {            list = sftpUtil.listDetail(filePath);        } else {            list = sftpUtil.listDetail(SftpConfig.getRootpath() + filePath);        }        SftpUtil.release();        return Return.Ok(list);    }        @RequestMapping(value = "/file/listOfRecursion")    @ResponseBody    public Return listOfRecursion(@RequestParam("filePath") String filePath) {        log.debug("获取路径下列表 :{}", filePath);        SftpUtil sftpUtil = SftpUtil.getSftpUtil();        ArrayList<String> strings = new ArrayList<>();        Return ret = null;        List<String> list;        List<String> list1 = new ArrayList<>();        try {            if (SftpConfig.WIN.equals(SftpConfig.getEnv())) {                list = sftpUtil.listOfRecursion(filePath, strings);                ret = Return.Ok(list);            } else {                list = sftpUtil.listOfRecursion(SftpConfig.getRootpath() + filePath, strings);                for (String str : list) {                    str = StringUtils.substring(str, SftpConfig.getRootpath().length() - 1);                    list1.add(str);                }                ret = Return.Ok(list1);            }        } catch (SftpException e) {            log.error("listOfRecursion 获取目录列表 channel.ls " + filePath + "失败 " + e);            SftpUtil.release();            ret = Return.Fail(e.getMessage());        }finally {            SftpUtil.release();        }        return ret;    }        @RequestMapping(value = "file/copy")    @ResponseBody    public Return copy(String src, String desc) {        SftpUtil sftpUtil = SftpUtil.getSftpUtil();        if (SftpConfig.WIN.equals(SftpConfig.getEnv())) {            sftpUtil.copy(src, desc);        } else {            sftpUtil.copy(SftpConfig.getRootpath() + src, SftpConfig.getRootpath() + desc);        }        SftpUtil.release();        return Return.Ok("复制成功");    }        @RequestMapping(value = "file/del")    @ResponseBody    public Return del(String filePath) {        log.debug("删除此文件 :{}", filePath);        Boolean flag = false;        SftpUtil sftpUtil = SftpUtil.getSftpUtil();        if (SftpConfig.WIN.equals(SftpConfig.getEnv())) {            flag = sftpUtil.del(filePath);        } else {            flag = sftpUtil.del(SftpConfig.getRootpath() + filePath);        }        SftpUtil.release();        return new Return(flag, flag ? "删除成功" : "文件不存在或删除失败");    }   }

    以上是“springboot怎么读取sftp的文件”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: springboot怎么读取sftp的文件

    本文链接: https://www.lsjlt.com/news/305930.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • springboot怎么读取sftp的文件
      这篇文章主要介绍springboot怎么读取sftp的文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot读取sftp的文件1.添加pom依赖(基于springboot项目)<dependen...
      99+
      2023-06-25
    • springboot如何读取sftp的文件
      目录springboot读取sftp的文件1.添加pom依赖(基于springboot项目)2.application.yaml配置文件3.工具类4.实际调用springboot使用...
      99+
      2022-11-12
    • springboot怎么读取properties文件
      在Spring Boot中,可以使用`@Value`注解和`Environment`接口来读取properties文件。1. 使用`...
      99+
      2023-09-25
      springboot
    • springboot怎么读取配置文件
      在Spring Boot中,可以通过`@Value`注解、`Environment`接口、`@ConfigurationProper...
      99+
      2023-10-25
      springboot
    • springboot怎么读取外部文件
      Spring Boot提供了多种方式来读取外部文件,以下是其中几种常用的方式:1. 使用`@Value`注解:可以直接在代码中使用`...
      99+
      2023-09-28
      springboot
    • springboot怎么读取yml文件内容
      在Spring Boot中,可以使用@ConfigurationProperties注解来读取yml文件中的内容。首先,在你的Spr...
      99+
      2023-10-18
      springboot
    • springboot怎么读取相对路径文件
      在Spring Boot中,可以使用`ResourceLoader`来读取相对路径文件。可以将文件放置在项目的`resources`...
      99+
      2023-09-28
      springboot
    • springboot怎么读取外部配置文件
      Spring Boot可以通过使用@PropertySource注解来读取外部配置文件。以下是一种常见的方法:1. 创建一个配置类,...
      99+
      2023-09-25
      springboot
    • SpringBoot怎么实现读取YML,yaml,properties文件
      本篇内容主要讲解“SpringBoot怎么实现读取YML,yaml,properties文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么实现读取YML,yaml,pro...
      99+
      2023-07-06
    • springboot项目怎么读取resources目录下的文件
      这篇“springboot项目怎么读取resources目录下的文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“sprin...
      99+
      2023-07-05
    • SpringBoot怎么读取资源目录中JSON文件
      本文小编为大家详细介绍“SpringBoot怎么读取资源目录中JSON文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot怎么读取资源目录中JSON文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
      99+
      2023-07-06
    • springboot如何读取resources下的文件
      今天小编给大家分享一下springboot如何读取resources下的文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。项...
      99+
      2023-07-02
    • SpringBoot 如何读取classpath下的文件
      SpringBoot 读取classpath下文件 开发过程中,必不可少的需要读取文件,对于打包方式的不同,还会存在一些坑,比如以jar包方式部署时,文件都存在于jar包中,某些读取...
      99+
      2022-11-12
    • springboot如何读取模板文件
      目录springboot读取模板文件第一种第二种第三种SpringBoot读取配置文件信息一、创建配置文件application.propertiesapplication.yml二...
      99+
      2022-11-12
    • SpringBoot如何读取Resource下文件
      这篇文章给大家分享的是有关SpringBoot如何读取Resource下文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SpringBoot读取Resource下文件最近在项目中涉及到Excle的导入功能,通常...
      99+
      2023-06-20
    • SpringBoot不读取bootstrap.yml/properties文件问题怎么解决
      本篇内容主要讲解“SpringBoot不读取bootstrap.yml/properties文件问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot不读取bootstr...
      99+
      2023-06-22
    • springboot读取nacos配置文件的实现
      目录首先,Nacos 的配置文件如下 第一种方式来解析第二种方式来解析SpringBoot 注册服务到 Nacos 上,由 Nacos 来做服务的管理。在 Nacos的配置...
      99+
      2022-11-13
    • springboot读取application.yaml文件数据的方法
      本文实例为大家分享了springboot读取application.yaml文件数据的具体代码,供大家参考,具体内容如下 提示:以下是本篇文章正文内容,下面案例可供参考 一、创建并编...
      99+
      2022-11-13
    • SpringBoot中如何解决读取properties文件读取问题
      目录如何解决读取properties文件读取问题问题描述路径设置中文乱码读取指定properties文件设置配置属性类型配置文件如何解决读取properties文件读取问题 问题描述...
      99+
      2022-11-13
    • java怎么读取文件?
      java中可以使用两个类来读取文件:BufferedReader和BufferedInputStream。1、使用 BufferedReader在下面的实例中,我们将看到两种使用 BufferedReader 来读取文件的方法。在这里, 我...
      99+
      2014-12-22
      java教程 java
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作