SFTP上传下载

1、导入jar包 ora-sftp-1.4.jar

2、编译package和执行sql文件   cux_1_pm_sftp_util.pck, ORA_SFTP_FILE.sql

3、上传文件

/*===============================================
  *   PROCEDURE NAME:
  *       Upload_Sftp
  *
  *   DESCRIPTION:
  *       上传sftp
  *   HISTORY:
  *     1.00   2020-07-02   wang.chen   Creation
  * ==============================================*/
  PROCEDURE Upload_Sftp(p_Org_Id      IN NUMBER --公司ID
                       ,p_Doc_Name    IN VARCHAR2 --文件名称
                       ,p_Blob        IN BLOB --文件BLOB
                       ,x_Ret_Status  OUT VARCHAR2 --成功返回S
                       ,x_Ret_Message OUT VARCHAR2 --错误信息
                        ) IS
    l_Connection_Id   NUMBER;
    l_File_Name       VARCHAR2(240);
    l_File_Path       VARCHAR2(240);
    l_File_Path1      VARCHAR2(240);
    l_Upload_Path     VARCHAR2(240);
    l_File_Exists     NUMBER;
    l_Downloaded_File BLOB;
  BEGIN
    --初始化  
    x_Ret_Status  := Fnd_Api.g_Ret_Sts_Success;
    x_Ret_Message := NULL;
  
    --连接文件服务器
    BEGIN
      l_Connection_Id := Cux_1_Pm_Sftp_Util.Connect_Host('101.01.197.411'
                                                        ,22
                                                        ,'123456'
                                                        ,'111111');
    EXCEPTION
      WHEN OTHERS THEN
        l_Connection_Id := NULL;
        x_Ret_Status    := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message   := x_Ret_Message || SQLERRM;
        RETURN;
    END;
  
    l_File_Path  := '/pmsfiles/test/upload/b01/' || p_Org_Id || '/' ||
                    p_Doc_Name;
    l_File_Path1 := '/pmsfiles/test/upload/b01/' || p_Org_Id || '/';
    --验证文件是否存在
    BEGIN
      IF Cux_1_Pm_Sftp_Util.Exists(l_Connection_Id
                                  ,l_File_Path1) THEN
        NULL;
      ELSE
        --若文件不存在则创建目录文件
        Cux_1_Pm_Sftp_Util.Create_Dir(l_Connection_Id
                                     ,l_File_Path1);
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message := x_Ret_Message || SQLERRM;
        RETURN;
    END;
  
    --上传
    BEGIN
      Cux_1_Pm_Sftp_Util.Upload(l_Connection_Id
                               ,p_Blob
                               ,l_File_Path);
    EXCEPTION
      WHEN OTHERS THEN
        x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message := x_Ret_Message || SQLERRM;
        RETURN;
    END;
  
    Ora_Sftp.Disconnect_Host(l_Connection_Id);
  
  EXCEPTION
    WHEN OTHERS THEN
      x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
      x_Ret_Message := x_Ret_Message || SQLERRM;
  END Upload_Sftp;

4、下载文件

 /*===============================================
  *   PROCEDURE NAME:
  *       Download_Sftp
  *   DESCRIPTION:
  *       下载sftp
  *   HISTORY:
  *     1.00   2020-07-01   wang.chen   Creation
  * ==============================================*/
  PROCEDURE Download_Sftp(p_File_Id     IN NUMBER --文件id
                         ,x_Blob        OUT BLOB --文件BLOB
                         ,x_Ret_Status  OUT VARCHAR2 --成功返回S
                         ,x_Ret_Message OUT VARCHAR2 --错误信息
                          ) IS
  
    l_Connection_Id   NUMBER;
    l_File_Name       VARCHAR2(240);
    l_File_Path       VARCHAR2(240);
    l_Upload_Path     VARCHAR2(240);
    l_File_Exists     NUMBER;
    l_Downloaded_File BLOB;
  BEGIN
    --初始化  
    x_Ret_Status  := Fnd_Api.g_Ret_Sts_Success;
    x_Ret_Message := NULL;
  
    --连接文件服务器
    BEGIN
      l_Connection_Id := Cux_1_Pm_Sftp_Util.Connect_Host('101.01.197.411'
                                                        ,22
                                                        ,'123456'
                                                        ,'111111');
    EXCEPTION
      WHEN OTHERS THEN
        l_Connection_Id := NULL;
        x_Ret_Status    := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message   := x_Ret_Message || SQLERRM;
        RETURN;
    END;
  
    --根据文件id获取文件名称,文件路径
    BEGIN
      SELECT f.File_Name
            ,f.Upload_Path
        INTO l_File_Name
            ,l_Upload_Path
        FROM Cux_1_Pm_Upload_Files f
       WHERE 1 = 1
         AND f.File_Id = p_File_Id;
    EXCEPTION
      WHEN OTHERS THEN
        l_File_Name   := NULL;
        l_Upload_Path := NULL;
        x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message := x_Ret_Message || '根据文件id找不到文件名称和目录!';
        RETURN;
    END;
  
    l_File_Path := l_Upload_Path || l_File_Name;
    --验证文件是否存在
    BEGIN
      IF Cux_1_Pm_Sftp_Util.Exists(l_Connection_Id
                                  ,l_File_Path) THEN
        NULL;
      ELSE
        x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message := x_Ret_Message || '文件服务器下文件不存在!';
        RETURN;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message := x_Ret_Message || SQLERRM;
        RETURN;
    END;
  
    --下载
    BEGIN
      l_Downloaded_File := Cux_1_Pm_Sftp_Util.Download(l_Connection_Id
                                                      ,l_File_Path);
      IF (l_Downloaded_File IS NULL) THEN
        x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message := x_Ret_Message || '下载的文件为空';
        RETURN;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        x_Ret_Message := x_Ret_Message || SQLERRM;
        RETURN;
    END;
  
    x_Blob := l_Downloaded_File;
  
    Cux_1_Pm_Sftp_Util.Disconnect_Host(l_Connection_Id);
  
  EXCEPTION
    WHEN OTHERS THEN
      x_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
      x_Ret_Message := x_Ret_Message || SQLERRM;
  END Download_Sftp;
原文地址:https://www.cnblogs.com/wang-chen/p/13224421.html