国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java連接sftp服務器實現(xiàn)上傳下載

這篇具有很好參考價值的文章主要介紹了java連接sftp服務器實現(xiàn)上傳下載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

我最初的需求是java讀取遠程windows服務器的文件。查了一圈,發(fā)現(xiàn)將遠程服務器作為ftp服務器是最方便快捷的。著手準備,首先要讓遠程服務器提供ftp服務,再做相關配置,然后通過代碼配置遠程地址,用戶名密碼(ftp服務設置)讀取文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-730195.html

一、給目標服務器安裝sshd服務

  • 我目前使用的是 freeSSHd.exe,下載后按照步驟一步步安裝,最后倆彈窗,第一個選,第二個選
    java sftp上傳文件,java
    java sftp上傳文件,java

二、基礎配置

  1. 雙擊打開安裝好的程序,在右下角找到圖標,右鍵,setting
    java sftp上傳文件,java
  2. 按照步驟配置
    java sftp上傳文件,java
    java sftp上傳文件,java
    java sftp上傳文件,java
    java sftp上傳文件,java
    java sftp上傳文件,java
  3. unload之后重新打開,配置生效
    java sftp上傳文件,java

三、java實現(xiàn)上傳下載(main方法中有測試用例)

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.*;

import com.jcraft.jsch.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @ClassName: SFTPUtil
 * @Description: sftp連接工具類
 * @version 1.0.0
 */
public class SFTPUtil {
    private transient Logger log = LoggerFactory.getLogger(this.getClass());

    private ChannelSftp sftp;

    private Session session;
    /** FTP 登錄用戶名*/
    private String username;
    /** FTP 登錄密碼*/
    private String password;
    /** 私鑰 */
    private String privateKey;
    /** FTP 服務器地址IP地址*/
    private String host;
    /** FTP 端口*/
    private int port;


    /**
     * 構造基于密碼認證的sftp對象
     * @param username
     * @param password
     * @param host
     * @param port
     */
    public SFTPUtil(String username, String password, String host, int port) {
        this.username = username;
        this.password = password;
        this.host = host;
        this.port = port;
    }

    /**
     * 構造基于秘鑰認證的sftp對象
     * @param username
     * @param host
     * @param port
     * @param privateKey
     */
    public SFTPUtil(String username, String host, int port, String privateKey) {
        this.username = username;
        this.host = host;
        this.port = port;
        this.privateKey = privateKey;
    }

    public SFTPUtil(){}

    /**
     * 連接sftp服務器
     *
     * @throws Exception
     */
    public void login(){
        try {
            JSch jsch = new JSch();
            if (privateKey != null) {
                jsch.addIdentity(privateKey);// 設置私鑰
                log.info("sftp connect,path of private key file:{}" , privateKey);
            }
            log.info("sftp connect by host:{} username:{}",host,username);

            session = jsch.getSession(username, host, port);
            log.info("Session is build");
            if (password != null) {
                session.setPassword(password);
            }
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");

            session.setConfig(config);
            session.connect();
            log.info("Session is connected");

            Channel channel = session.openChannel("sftp");
            channel.connect();
            log.info("channel is connected");

            sftp = (ChannelSftp) channel;
            log.info(String.format("sftp server host:[%s] port:[%s] is connect successfull", host, port));
        } catch (JSchException e) {
            log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{host, port, e.getMessage()});
        }
    }

    /**
     * 關閉連接 server
     */
    public void logout(){
        if (sftp != null) {
            if (sftp.isConnected()) {
                sftp.disconnect();
                log.info("sftp is closed already");
            }
        }
        if (session != null) {
            if (session.isConnected()) {
                session.disconnect();
                log.info("sshSession is closed already");
            }
        }
    }

    /**
     * 將輸入流的數(shù)據(jù)上傳到sftp作為文件
     *
     * @param directory
     *            上傳到該目錄
     * @param sftpFileName
     *            sftp端文件名
     * @param input
     *            輸入流
     * @throws SftpException
     * @throws Exception
     */
    public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
        try {
            sftp.cd(directory);
        } catch (SftpException e) {
            log.warn("directory is not exist");
            sftp.mkdir(directory);
            sftp.cd(directory);
        }
        sftp.put(input, sftpFileName);
        log.info("file:{} is upload successful" , sftpFileName);
    }

    /**
     * 上傳單個文件
     *
     * @param directory
     *            上傳到sftp目錄
     * @param uploadFile
     *            要上傳的文件,包括路徑
     * @throws FileNotFoundException
     * @throws SftpException
     * @throws Exception
     */
    public void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{
        File file = new File(uploadFile);
        upload(directory, file.getName(), new FileInputStream(file));
    }

    /**
     * 將byte[]上傳到sftp,作為文件。注意:從String生成byte[]是,要指定字符集。
     *
     * @param directory
     *            上傳到sftp目錄
     * @param sftpFileName
     *            文件在sftp端的命名
     * @param byteArr
     *            要上傳的字節(jié)數(shù)組
     * @throws SftpException
     * @throws Exception
     */
    public void upload(String directory, String sftpFileName, byte[] byteArr) throws SftpException{
        upload(directory, sftpFileName, new ByteArrayInputStream(byteArr));
    }

    /**
     * 將字符串按照指定的字符編碼上傳到sftp
     *
     * @param directory
     *            上傳到sftp目錄
     * @param sftpFileName
     *            文件在sftp端的命名
     * @param dataStr
     *            待上傳的數(shù)據(jù)
     * @param charsetName
     *            sftp上的文件,按該字符編碼保存
     * @throws UnsupportedEncodingException
     * @throws SftpException
     * @throws Exception
     */
    public void upload(String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException{
        upload(directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));
    }

    /**
     * 下載文件
     *
     * @param directory
     *            下載目錄
     * @param downloadFile
     *            下載的文件
     * @param saveFile
     *            存在本地的路徑
     * @throws SftpException
     * @throws FileNotFoundException
     * @throws Exception
     */
    public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{
        if (directory != null && !"".equals(directory)) {
            sftp.cd(directory);
        }
        File file = new File(saveFile);
        sftp.get(downloadFile, new FileOutputStream(file));
        log.info("file:{} is download successful" , downloadFile);
    }
    /**
     * 下載文件
     * @param directory 下載目錄
     * @param downloadFile 下載的文件名
     * @return 字節(jié)數(shù)組
     * @throws SftpException
     * @throws IOException
     * @throws Exception
     */
    public byte[] download(String directory, String downloadFile) throws SftpException, IOException{
        if (directory != null && !"".equals(directory)) {
            sftp.cd(directory);
        }
        InputStream is = sftp.get(downloadFile);

        byte[] fileData = IOUtils.toByteArray(is);

        log.info("file:{} is download successful" , downloadFile);
        return fileData;
    }

    /**
     * 刪除文件
     *
     * @param directory
     *            要刪除文件所在目錄
     * @param deleteFile
     *            要刪除的文件
     * @throws SftpException
     * @throws Exception
     */
    public void delete(String directory, String deleteFile) throws SftpException{
        sftp.cd(directory);
        sftp.rm(deleteFile);
    }

    /**
     * 列出目錄下的文件
     *
     * @param directory
     *            要列出的目錄
     * @return
     * @throws SftpException
     */
    public Vector<?> listFiles(String directory) throws SftpException {
        return sftp.ls(directory);
    }

    public static void main(String[] args) throws SftpException, IOException {
//        SFTPUtil sftp = new SFTPUtil("user1", "123456", "192.168.0.244", 22);
//        sftp.login();
//        byte[] buff = sftp.download("/", "index.js");

//        SFTPUtil sftp = new SFTPUtil("user", "123456", "192.168.0.162", 22);
//        sftp.login();
//        byte[] buff = sftp.download("/a", "ECDSAKey.cfg");
//        System.out.println(new String(buff));

//        File file = new File("C:\\Program Files (x86)\\NetSarang\\Xmanager Enterprise 4\\2.txt");
//        InputStream is = new FileInputStream(file);
//        sftp.upload("/usr/ywnysftp/upload/test", "csdn1.png", is);
//        sftp.upload("/upload", "2.txt", is);
        // 下載,上面的是之前的測試案例
        SFTPUtil sftp = new SFTPUtil("user", "12345678", "192.168.0.64", 22);
        sftp.login();
        byte[] buff = sftp.download("/", "導入數(shù)據(jù).xlsx");
        IOUtils.write(buff, new FileOutputStream("C:\\Users\\win20\\Desktop\\file\\導入數(shù)據(jù).xlsx"));
        sftp.logout();
    }
}

到了這里,關于java連接sftp服務器實現(xiàn)上傳下載的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Java實現(xiàn)讀取SFTP服務器指定目錄文件

    SFTP服務器的簡介 SFTP(SSH File Transfer Protocol)是一種在安全通道上傳輸文件的協(xié)議,它是基于SSH(Secure Shell)協(xié)議的擴展,用于在客戶端和服務器之間進行加密的文件傳輸。 SFTP 服務器的主要作用是提供一個安全的方式來上傳、下載和管理文件。以下是一些 SFTP 服務器的主要

    2024年02月03日
    瀏覽(21)
  • 服務器如何下載百度網(wǎng)盤文件?Linux服務器如何在百度網(wǎng)盤中連接、上傳下載;在Linux服務器上下載百度云盤中的資料

    服務器如何下載百度網(wǎng)盤文件?Linux服務器如何在百度網(wǎng)盤中連接、上傳下載;在Linux服務器上下載百度云盤中的資料

    百度云提供Python包bypy進行遠程服務器的對接然后下載: https://github.com/houtianze/bypy 可以通過pip直接下載,授權本人的百度云賬號后,就可以直接使Linux電腦本地文件與百度網(wǎng)盤的apps(我的應用數(shù)據(jù))/bypy目錄下的文件進行上傳與下載的交互了。 本文簡單介紹其相關的使用方式

    2024年02月06日
    瀏覽(27)
  • sftp連接遠程服務器命令

    sftp連接遠程服務器命令

    ? ? ?

    2024年02月07日
    瀏覽(19)
  • vscode遠程連接服務器(remote ssh)+上傳本地文件到服務器(sftp)

    vscode遠程連接服務器(remote ssh)+上傳本地文件到服務器(sftp)

    一、vscode遠程連接服務器 1.點擊vscode右邊工具欄點擊拓展,搜索remote ssh并安裝 2.安裝完成后,左邊工具欄會出現(xiàn)一個電腦圖標的遠程資源管理器,點擊后選擇SSH TARGETS的設置 3.然后選擇第一個..sshconfig 4.向服務器管理員索要服務器的連接信息并修改ssh config文件 ? 5.設置完成

    2024年02月01日
    瀏覽(27)
  • Java從ftp服務器上傳與下載文件

    業(yè)務需要從ftp服務器上上傳、下載、刪除文件等功能,通過查閱資料及手動敲打代碼,實現(xiàn)了操作ftp的基本功能,有需求的小伙伴可以看看具體的實現(xiàn)過程。 摘自百度百科:文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)是用于在 網(wǎng)絡 上進行文件傳輸?shù)囊惶讟藴蕝f(xié)議,F(xiàn)TP允許用戶以

    2024年02月07日
    瀏覽(33)
  • Windows11 - 使用 sftp連接 CentOS 7,實現(xiàn)文件上傳與下載

    Windows系統(tǒng)的cmd命令實現(xiàn)遠程連接服務器,并且使用 sftp連接 CentOS 7,實現(xiàn)文件上傳與下載 注意:下方所有服務器ip,均為示例ip 這樣就成功連接上服務器,不過命令和Linux上命令有所區(qū)別 如下(示例): 注意:sftp 表示已經(jīng)進入 sftp 的交互模式。 連接成功之后,使用 pwd 命令查

    2024年02月03日
    瀏覽(29)
  • AutoDL租用實例、配置環(huán)境、Pycharm中SSH、SFTP連接遠程服務器、Pycharm訪問遠程服務器終端

    AutoDL租用實例、配置環(huán)境、Pycharm中SSH、SFTP連接遠程服務器、Pycharm訪問遠程服務器終端

    AutoDL鏈接:AutoDL 注冊登錄后進入控制臺,左 側容器實例 — 租用新實例 在租用實例頁面:選擇 計費方式 (用的不多的建議按量計費),選擇合適的主機,選擇要創(chuàng)建實例中的GPU數(shù)量(創(chuàng)建完后也可以增加GPU數(shù)量),選擇鏡像(內置了不同的深度學習框架),最后創(chuàng)建即可 創(chuàng)建

    2024年02月10日
    瀏覽(25)
  • Java使用sftp文件服務器

    在工作中,對接第三方服務時,往往存在文件的傳輸使用,使用stfp是一種簡單有效的方式,可以對文件進行上傳和下載。下面是使用sftp文件服務器的demo,可以作為工具類放入項目中,即可簡單上手和使用。

    2024年02月11日
    瀏覽(25)
  • 【解決方法】錯誤:無法和SFTP服務器建立FTP連接,請選擇合適的協(xié)議

    【解決方法】錯誤:無法和SFTP服務器建立FTP連接,請選擇合適的協(xié)議

    在家連實驗室的服務器時,出現(xiàn)了如下的情況:當時一直在想為啥協(xié)議不合適。 1. 點擊【文件】-【站點管理器】,出現(xiàn)如下界面: 可能你的那里沒有新站點,如果沒有就點擊新站點哦。 2. 點擊【協(xié)議】,選擇【SFTP-SSH File Transform Protocol】協(xié)議。 ? 3. 輸入【IP地址】和【端口

    2024年02月06日
    瀏覽(50)
  • python flask創(chuàng)建服務器實現(xiàn)文件的上傳下載,已獲千贊

    python flask創(chuàng)建服務器實現(xiàn)文件的上傳下載,已獲千贊

    } 二、后端代碼(python) import os from string import Template from flask import Flask, send_file,request,jsonify from flask_cors import CORS import time app = Flask( name ) absolute = os.path.dirname( file ) CORS(app) app.debug = True FOLDER = os.path.join(absolute, ‘save_file’) HOST = “l(fā)ocalhost” PORT = 8080 UPLOAD = ‘upload’ app.config

    2024年04月22日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包