精华内容
下载资源
问答
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...

    前言需求

    使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有现成的就很舒服,在此介绍给大家。

    具体实现

    引入的pom

    ch.ethz.ganymed

    ganymed-ssh2

    262

    com.jcraft

    jsch

    0.1.55

    建立实体类

    public class ResultEntity {

    private String code;

    private String message;

    private File file;

    public ResultEntity(){}

    public ResultEntity(String code,String message,File file) {

    super();

    this.code = code;

    this.message = message;

    this.file = file;

    }

    public String getCode() {

    return code;

    }

    public void setCode(String code) {

    this.code = code;

    }

    public String getMessage() {

    return message;

    }

    public void setMessage(String message) {

    this.message = message;

    }

    public File getFile() {

    return file;

    }

    public void setFile(File file) {

    this.file = file;

    }

    }

    public class ScpConnectEntity {

    private String userName;

    private String passWord;

    private String url;

    private String targetPath;

    public String getTargetPath() {

    return targetPath;

    }

    public void setTargetPath(String targetPath) {

    this.targetPath = targetPath;

    }

    public String getUserName() {

    return userName;

    }

    public void setUserName(String userName) {

    this.userName = userName;

    }

    public String getPassWord() {

    return passWord;

    }

    public void setPassWord(String passWord) {

    this.passWord = passWord;

    }

    public String getUrl() {

    return url;

    }

    public void setUrl(String url) {

    this.url = url;

    }

    }

    建立文件上传工具类

    @Configuration

    public class FileUploadUtil {

    @Value("${remoteServer.url}")

    private String url;

    @Value("${remoteServer.password}")

    private String passWord;

    @Value("${remoteServer.username}")

    private String userName;

    @Async

    public ResultEntity uploadFile(File file,String targetPath,String remoteFileName) throws Exception{

    ScpConnectEntity scpConnectEntity=new ScpConnectEntity();

    scpConnectEntity.setTargetPath(targetPath);

    scpConnectEntity.setUrl(url);

    scpConnectEntity.setPassWord(passWord);

    scpConnectEntity.setUserName(userName);

    String code = null;

    String message = null;

    try {

    if (file == null || !file.exists()) {

    throw new IllegalArgumentException("请确保上传文件不为空且存在!");

    }

    if(remoteFileName==null || "".equals(remoteFileName.trim())){

    throw new IllegalArgumentException("远程服务器新建文件名不能为空!");

    }

    remoteUploadFile(scpConnectEntity,file,remoteFileName);

    code = "ok";

    message = remoteFileName;

    } catch (IllegalArgumentException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (JSchException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (IOException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (Exception e) {

    throw e;

    } catch (Error e) {

    code = "Error";

    message = e.getMessage();

    }

    return new ResultEntity(code,message,null);

    }

    private void remoteUploadFile(ScpConnectEntity scpConnectEntity,File file,String remoteFileName) throws JSchException,IOException {

    Connection connection = null;

    ch.ethz.ssh2.Session session = null;

    SCPOutputStream scpo = null;

    FileInputStream fis = null;

    try {

    createDir(scpConnectEntity);

    }catch (JSchException e) {

    throw e;

    }

    try {

    connection = new Connection(scpConnectEntity.getUrl());

    connection.connect();

    if(!connection.authenticateWithPassword(scpConnectEntity.getUserName(),scpConnectEntity.getPassWord())){

    throw new RuntimeException("SSH连接服务器失败");

    }

    session = connection.openSession();

    SCPClient scpClient = connection.createSCPClient();

    scpo = scpClient.put(remoteFileName,file.length(),scpConnectEntity.getTargetPath(),"0666");

    fis = new FileInputStream(file);

    byte[] buf = new byte[1024];

    int hasMore = fis.read(buf);

    while(hasMore != -1){

    scpo.write(buf);

    hasMore = fis.read(buf);

    }

    } catch (IOException e) {

    throw new IOException("SSH上传文件至服务器出错"+e.getMessage());

    }finally {

    if(null != fis){

    try {

    fis.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != scpo){

    try {

    scpo.flush();

    // scpo.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != session){

    session.close();

    }

    if(null != connection){

    connection.close();

    }

    }

    }

    private boolean createDir(ScpConnectEntity scpConnectEntity ) throws JSchException {

    JSch jsch = new JSch();

    com.jcraft.jsch.Session sshSession = null;

    Channel channel= null;

    try {

    sshSession = jsch.getSession(scpConnectEntity.getUserName(),scpConnectEntity.getUrl(),22);

    sshSession.setPassword(scpConnectEntity.getPassWord());

    sshSession.setConfig("StrictHostKeyChecking","no");

    sshSession.connect();

    channel = sshSession.openChannel("sftp");

    channel.connect();

    } catch (JSchException e) {

    e.printStackTrace();

    throw new JSchException("SFTP连接服务器失败"+e.getMessage());

    }

    ChannelSftp channelSftp=(ChannelSftp) channel;

    if (isDirExist(scpConnectEntity.getTargetPath(),channelSftp)) {

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }else {

    String pathArry[] = scpConnectEntity.getTargetPath().split("/");

    StringBuffer filePath=new StringBuffer("/");

    for (String path : pathArry) {

    if (path.equals("")) {

    continue;

    }

    filePath.append(path + "/");

    try {

    if (isDirExist(filePath.toString(),channelSftp)) {

    channelSftp.cd(filePath.toString());

    } else {

    // 建立目录

    channelSftp.mkdir(filePath.toString());

    // 进入并设置为当前目录

    channelSftp.cd(filePath.toString());

    }

    } catch (SftpException e) {

    e.printStackTrace();

    throw new JSchException("SFTP无法正常操作服务器"+e.getMessage());

    }

    }

    }

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }

    private boolean isDirExist(String directory,ChannelSftp channelSftp) {

    boolean isDirExistFlag = false;

    try {

    SftpATTRS sftpATTRS = channelSftp.lstat(directory);

    isDirExistFlag = true;

    return sftpATTRS.isDir();

    } catch (Exception e) {

    if (e.getMessage().toLowerCase().equals("no such file")) {

    isDirExistFlag = false;

    }

    }

    return isDirExistFlag;

    }

    }

    属性我都写在Spring的配置文件里面了。将这个类托管给spring容器。

    如果在普通类里面使用这个类,就需要看一下上篇博客了。哈哈。

    总结

    在我们使用的时候,主要调uploadFile这个方法即可。传递File文件,目标路径及文件名称。

    展开全文
  • Java如何实现上传文件到服务器指定目录发布于 2020-12-9|复制链接摘记: 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很...

    Java如何实现上传文件到服务器指定目录

    发布于 2020-12-9|

    复制链接

    摘记: 前言需求

    使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有现成的就很舒服,在此介绍给大家。具体实现

    引入的pom ..

    前言需求使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有现成的就很舒服,在此介绍给大家。具体实现

    引入的pom

    ```xml

    ch.ethz.ganymed

    ganymed-ssh2

    262

    com.jcraft

    jsch

    0.1.55

    ```

    建立实体类

    ```java

    public class ResultEntity {

    private String code;

    private String message;

    private File file;

    public ResultEntity(){}

    public ResultEntity(String code, String message, File file) {

    super();

    this.code = code;

    this.message = message;

    this.file = file;

    }

    public String getCode() {

    return code;

    }

    public void setCode(String code) {

    this.code = code;

    }

    public String getMessage() {

    return message;

    }

    public void setMessage(String message) {

    this.message = message;

    }

    public File getFile() {

    return file;

    }

    public void setFile(File file) {

    this.file = file;

    }

    }

    ```

    ```java

    public class ScpConnectEntity {

    private String userName;

    private String passWord;

    private String url;

    private String targetPath;

    public String getTargetPath() {

    return targetPath;

    }

    public void setTargetPath(String targetPath) {

    this.targetPath = targetPath;

    }

    public String getUserName() {

    return userName;

    }

    public void setUserName(String userName) {

    this.userName = userName;

    }

    public String getPassWord() {

    return passWord;

    }

    public void setPassWord(String passWord) {

    this.passWord = passWord;

    }

    public String getUrl() {

    return url;

    }

    public void setUrl(String url) {

    this.url = url;

    }

    }

    ```

    建立文件上传工具类

    @Configuration

    ```java

    @Configuration

    public class FileUploadUtil {

    @Value("${remoteServer.url}")

    private String url;

    @Value("${remoteServer.password}")

    private String passWord;

    @Value("${remoteServer.username}")

    private String userName;

    @Async

    public ResultEntity uploadFile(File file, String targetPath, String remoteFileName) throws Exception{

    ScpConnectEntity scpConnectEntity=new ScpConnectEntity();

    scpConnectEntity.setTargetPath(targetPath);

    scpConnectEntity.setUrl(url);

    scpConnectEntity.setPassWord(passWord);

    scpConnectEntity.setUserName(userName);

    String code = null;

    String message = null;

    try {

    if (file == null || !file.exists()) {

    throw new IllegalArgumentException("请确保上传文件不为空且存在!");

    }

    if(remoteFileName==null || "".equals(remoteFileName.trim())){

    throw new IllegalArgumentException("远程服务器新建文件名不能为空!");

    }

    remoteUploadFile(scpConnectEntity, file, remoteFileName);

    code = "ok";

    message = remoteFileName;

    } catch (IllegalArgumentException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (JSchException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (IOException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (Exception e) {

    throw e;

    } catch (Error e) {

    code = "Error";

    message = e.getMessage();

    }

    return new ResultEntity(code, message, null);

    }

    private void remoteUploadFile(ScpConnectEntity scpConnectEntity, File file,

    String remoteFileName) throws JSchException, IOException {

    Connection connection = null;

    ch.ethz.ssh2.Session session = null;

    SCPOutputStream scpo = null;

    FileInputStream fis = null;

    try {

    createDir(scpConnectEntity);

    }catch (JSchException e) {

    throw e;

    }

    try {

    connection = new Connection(scpConnectEntity.getUrl());

    connection.connect();

    if(!connection.authenticateWithPassword(scpConnectEntity.getUserName(),scpConnectEntity.getPassWord())){

    throw new RuntimeException("SSH连接服务器失败");

    }

    session = connection.openSession();

    SCPClient scpClient = connection.createSCPClient();

    scpo = scpClient.put(remoteFileName, file.length(), scpConnectEntity.getTargetPath(), "0666");

    fis = new FileInputStream(file);

    byte[] buf = new byte[1024];

    int hasMore = fis.read(buf);

    while(hasMore != -1){

    scpo.write(buf);

    hasMore = fis.read(buf);

    }

    } catch (IOException e) {

    throw new IOException("SSH上传文件至服务器出错"+e.getMessage());

    }finally {

    if(null != fis){

    try {

    fis.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != scpo){

    try {

    scpo.flush();

    // scpo.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != session){

    session.close();

    }

    if(null != connection){

    connection.close();

    }

    }

    }

    private boolean createDir(ScpConnectEntity scpConnectEntity ) throws JSchException {

    JSch jsch = new JSch();

    com.jcraft.jsch.Session sshSession = null;

    Channel channel= null;

    try {

    sshSession = jsch.getSession(scpConnectEntity.getUserName(), scpConnectEntity.getUrl(), 22);

    sshSession.setPassword(scpConnectEntity.getPassWord());

    sshSession.setConfig("StrictHostKeyChecking", "no");

    sshSession.connect();

    channel = sshSession.openChannel("sftp");

    channel.connect();

    } catch (JSchException e) {

    e.printStackTrace();

    throw new JSchException("SFTP连接服务器失败"+e.getMessage());

    }

    ChannelSftp channelSftp=(ChannelSftp) channel;

    if (isDirExist(scpConnectEntity.getTargetPath(),channelSftp)) {

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }else {

    String pathArry[] = scpConnectEntity.getTargetPath().split("/");

    StringBuffer filePath=new StringBuffer("/");

    for (String path : pathArry) {

    if (path.equals("")) {

    continue;

    }

    filePath.append(path + "/");

    try {

    if (isDirExist(filePath.toString(),channelSftp)) {

    channelSftp.cd(filePath.toString());

    } else {

    // 建立目录

    channelSftp.mkdir(filePath.toString());

    // 进入并设置为当前目录

    channelSftp.cd(filePath.toString());

    }

    } catch (SftpException e) {

    e.printStackTrace();

    throw new JSchException("SFTP无法正常操作服务器"+e.getMessage());

    }

    }

    }

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }

    private boolean isDirExist(String directory,ChannelSftp channelSftp) {

    boolean isDirExistFlag = false;

    try {

    SftpATTRS sftpATTRS = channelSftp.lstat(directory);

    isDirExistFlag = true;

    return sftpATTRS.isDir();

    } catch (Exception e) {

    if (e.getMessage().toLowerCase().equals("no such file")) {

    isDirExistFlag = false;

    }

    }

    return isDirExistFlag;

    }

    }

    ```

    属性我都写在Spring的配置文件里面了。将这个类托管给spring容器。

    展开全文
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...

    前言需求

    使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有现成的就很舒服,在此介绍给大家。

    具体实现

    引入的pom

    ch.ethz.ganymed

    ganymed-ssh2

    262

    com.jcraft

    jsch

    0.1.55

    建立实体类

    public class ResultEntity {

    private String code;

    private String message;

    private File file;

    public ResultEntity(){}

    public ResultEntity(String code, String message, File file) {

    super();

    this.code = code;

    this.message = message;

    this.file = file;

    }

    public String getCode() {

    return code;

    }

    public void setCode(String code) {

    this.code = code;

    }

    public String getMessage() {

    return message;

    }

    public void setMessage(String message) {

    this.message = message;

    }

    public File getFile() {

    return file;

    }

    public void setFile(File file) {

    this.file = file;

    }

    }

    public class ScpConnectEntity {

    private String userName;

    private String passWord;

    private String url;

    private String targetPath;

    public String getTargetPath() {

    return targetPath;

    }

    public void setTargetPath(String targetPath) {

    this.targetPath = targetPath;

    }

    public String getUserName() {

    return userName;

    }

    public void setUserName(String userName) {

    this.userName = userName;

    }

    public String getPassWord() {

    return passWord;

    }

    public void setPassWord(String passWord) {

    this.passWord = passWord;

    }

    public String getUrl() {

    return url;

    }

    public void setUrl(String url) {

    this.url = url;

    }

    }

    建立文件上传工具类

    @Configuration

    public class FileUploadUtil {

    @Value("${remoteServer.url}")

    private String url;

    @Value("${remoteServer.password}")

    private String passWord;

    @Value("${remoteServer.username}")

    private String userName;

    @Async

    public ResultEntity uploadFile(File file, String targetPath, String remoteFileName) throws Exception{

    ScpConnectEntity scpConnectEntity=new ScpConnectEntity();

    scpConnectEntity.setTargetPath(targetPath);

    scpConnectEntity.setUrl(url);

    scpConnectEntity.setPassWord(passWord);

    scpConnectEntity.setUserName(userName);

    String code = null;

    String message = null;

    try {

    if (file == null || !file.exists()) {

    throw new IllegalArgumentException("请确保上传文件不为空且存在!");

    }

    if(remoteFileName==null || "".equals(remoteFileName.trim())){

    throw new IllegalArgumentException("远程服务器新建文件名不能为空!");

    }

    remoteUploadFile(scpConnectEntity, file, remoteFileName);

    code = "ok";

    message = remoteFileName;

    } catch (IllegalArgumentException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (JSchException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (IOException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (Exception e) {

    throw e;

    } catch (Error e) {

    code = "Error";

    message = e.getMessage();

    }

    return new ResultEntity(code, message, null);

    }

    private void remoteUploadFile(ScpConnectEntity scpConnectEntity, File file,

    String remoteFileName) throws JSchException, IOException {

    Connection connection = null;

    ch.ethz.ssh2.Session session = null;

    SCPOutputStream scpo = null;

    FileInputStream fis = null;

    try {

    createDir(scpConnectEntity);

    }catch (JSchException e) {

    throw e;

    }

    try {

    connection = new Connection(scpConnectEntity.getUrl());

    connection.connect();

    if(!connection.authenticateWithPassword(scpConnectEntity.getUserName(),scpConnectEntity.getPassWord())){

    throw new RuntimeException("SSH连接服务器失败");

    }

    session = connection.openSession();

    SCPClient scpClient = connection.createSCPClient();

    scpo = scpClient.put(remoteFileName, file.length(), scpConnectEntity.getTargetPath(), "0666");

    fis = new FileInputStream(file);

    byte[] buf = new byte[1024];

    int hasMore = fis.read(buf);

    while(hasMore != -1){

    scpo.write(buf);

    hasMore = fis.read(buf);

    }

    } catch (IOException e) {

    throw new IOException("SSH上传文件至服务器出错"+e.getMessage());

    }finally {

    if(null != fis){

    try {

    fis.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != scpo){

    try {

    scpo.flush();

    // scpo.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != session){

    session.close();

    }

    if(null != connection){

    connection.close();

    }

    }

    }

    private boolean createDir(ScpConnectEntity scpConnectEntity ) throws JSchException {

    JSch jsch = new JSch();

    com.jcraft.jsch.Session sshSession = null;

    Channel channel= null;

    try {

    sshSession = jsch.getSession(scpConnectEntity.getUserName(), scpConnectEntity.getUrl(), 22);

    sshSession.setPassword(scpConnectEntity.getPassWord());

    sshSession.setConfig("StrictHostKeyChecking", "no");

    sshSession.connect();

    channel = sshSession.openChannel("sftp");

    channel.connect();

    } catch (JSchException e) {

    e.printStackTrace();

    throw new JSchException("SFTP连接服务器失败"+e.getMessage());

    }

    ChannelSftp channelSftp=(ChannelSftp) channel;

    if (isDirExist(scpConnectEntity.getTargetPath(),channelSftp)) {

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }else {

    String pathArry[] = scpConnectEntity.getTargetPath().split("/");

    StringBuffer filePath=new StringBuffer("/");

    for (String path : pathArry) {

    if (path.equals("")) {

    continue;

    }

    filePath.append(path + "/");

    try {

    if (isDirExist(filePath.toString(),channelSftp)) {

    channelSftp.cd(filePath.toString());

    } else {

    // 建立目录

    channelSftp.mkdir(filePath.toString());

    // 进入并设置为当前目录

    channelSftp.cd(filePath.toString());

    }

    } catch (SftpException e) {

    e.printStackTrace();

    throw new JSchException("SFTP无法正常操作服务器"+e.getMessage());

    }

    }

    }

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }

    private boolean isDirExist(String directory,ChannelSftp channelSftp) {

    boolean isDirExistFlag = false;

    try {

    SftpATTRS sftpATTRS = channelSftp.lstat(directory);

    isDirExistFlag = true;

    return sftpATTRS.isDir();

    } catch (Exception e) {

    if (e.getMessage().toLowerCase().equals("no such file")) {

    isDirExistFlag = false;

    }

    }

    return isDirExistFlag;

    }

    }

    属性我都写在Spring的配置文件里面了。将这个类托管给spring容器。

    如果在普通类里面使用这个类,就需要看一下上篇博客了。哈哈。

    总结

    在我们使用的时候,主要调uploadFile这个方法即可。传递File文件,目标路径及文件名称。

    展开全文
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...

    前言需求

    使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有现成的就很舒服,在此介绍给大家。

    具体实现

    引入的pom

    ch.ethz.ganymed

    ganymed-ssh2

    262

    com.jcraft

    jsch

    0.1.55

    建立实体类

    public class ResultEntity {

    private String code;

    private String message;

    private File file;

    public ResultEntity(){}

    public ResultEntity(String code,String message,File file) {

    super();

    this.code = code;

    this.message = message;

    this.file = file;

    }

    public String getCode() {

    return code;

    }

    public void setCode(String code) {

    this.code = code;

    }

    public String getMessage() {

    return message;

    }

    public void setMessage(String message) {

    this.message = message;

    }

    public File getFile() {

    return file;

    }

    public void setFile(File file) {

    this.file = file;

    }

    }

    public class ScpConnectEntity {

    private String userName;

    private String passWord;

    private String url;

    private String targetPath;

    public String getTargetPath() {

    return targetPath;

    }

    public void setTargetPath(String targetPath) {

    this.targetPath = targetPath;

    }

    public String getUserName() {

    return userName;

    }

    public void setUserName(String userName) {

    this.userName = userName;

    }

    public String getPassWord() {

    return passWord;

    }

    public void setPassWord(String passWord) {

    this.passWord = passWord;

    }

    public String getUrl() {

    return url;

    }

    public void setUrl(String url) {

    this.url = url;

    }

    }

    建立文件上传工具类

    @Configuration

    public class FileUploadUtil {

    @Value("${remoteServer.url}")

    private String url;

    @Value("${remoteServer.password}")

    private String passWord;

    @Value("${remoteServer.username}")

    private String userName;

    @Async

    public ResultEntity uploadFile(File file,String targetPath,String remoteFileName) throws Exception{

    ScpConnectEntity scpConnectEntity=new ScpConnectEntity();

    scpConnectEntity.setTargetPath(targetPath);

    scpConnectEntity.setUrl(url);

    scpConnectEntity.setPassWord(passWord);

    scpConnectEntity.setUserName(userName);

    String code = null;

    String message = null;

    try {

    if (file == null || !file.exists()) {

    throw new IllegalArgumentException("请确保上传文件不为空且存在!");

    }

    if(remoteFileName==null || "".equals(remoteFileName.trim())){

    throw new IllegalArgumentException("远程服务器新建文件名不能为空!");

    }

    remoteUploadFile(scpConnectEntity,file,remoteFileName);

    code = "ok";

    message = remoteFileName;

    } catch (IllegalArgumentException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (JSchException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (IOException e) {

    code = "Exception";

    message = e.getMessage();

    } catch (Exception e) {

    throw e;

    } catch (Error e) {

    code = "Error";

    message = e.getMessage();

    }

    return new ResultEntity(code,message,null);

    }

    private void remoteUploadFile(ScpConnectEntity scpConnectEntity,File file,String remoteFileName) throws JSchException,IOException {

    Connection connection = null;

    ch.ethz.ssh2.Session session = null;

    SCPOutputStream scpo = null;

    FileInputStream fis = null;

    try {

    createDir(scpConnectEntity);

    }catch (JSchException e) {

    throw e;

    }

    try {

    connection = new Connection(scpConnectEntity.getUrl());

    connection.connect();

    if(!connection.authenticateWithPassword(scpConnectEntity.getUserName(),scpConnectEntity.getPassWord())){

    throw new RuntimeException("SSH连接服务器失败");

    }

    session = connection.openSession();

    SCPClient scpClient = connection.createSCPClient();

    scpo = scpClient.put(remoteFileName,file.length(),scpConnectEntity.getTargetPath(),"0666");

    fis = new FileInputStream(file);

    byte[] buf = new byte[1024];

    int hasMore = fis.read(buf);

    while(hasMore != -1){

    scpo.write(buf);

    hasMore = fis.read(buf);

    }

    } catch (IOException e) {

    throw new IOException("SSH上传文件至服务器出错"+e.getMessage());

    }finally {

    if(null != fis){

    try {

    fis.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != scpo){

    try {

    scpo.flush();

    // scpo.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if(null != session){

    session.close();

    }

    if(null != connection){

    connection.close();

    }

    }

    }

    private boolean createDir(ScpConnectEntity scpConnectEntity ) throws JSchException {

    JSch jsch = new JSch();

    com.jcraft.jsch.Session sshSession = null;

    Channel channel= null;

    try {

    sshSession = jsch.getSession(scpConnectEntity.getUserName(),scpConnectEntity.getUrl(),22);

    sshSession.setPassword(scpConnectEntity.getPassWord());

    sshSession.setConfig("StrictHostKeyChecking","no");

    sshSession.connect();

    channel = sshSession.openChannel("sftp");

    channel.connect();

    } catch (JSchException e) {

    e.printStackTrace();

    throw new JSchException("SFTP连接服务器失败"+e.getMessage());

    }

    ChannelSftp channelSftp=(ChannelSftp) channel;

    if (isDirExist(scpConnectEntity.getTargetPath(),channelSftp)) {

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }else {

    String pathArry[] = scpConnectEntity.getTargetPath().split("/");

    StringBuffer filePath=new StringBuffer("/");

    for (String path : pathArry) {

    if (path.equals("")) {

    continue;

    }

    filePath.append(path + "/");

    try {

    if (isDirExist(filePath.toString(),channelSftp)) {

    channelSftp.cd(filePath.toString());

    } else {

    // 建立目录

    channelSftp.mkdir(filePath.toString());

    // 进入并设置为当前目录

    channelSftp.cd(filePath.toString());

    }

    } catch (SftpException e) {

    e.printStackTrace();

    throw new JSchException("SFTP无法正常操作服务器"+e.getMessage());

    }

    }

    }

    channel.disconnect();

    channelSftp.disconnect();

    sshSession.disconnect();

    return true;

    }

    private boolean isDirExist(String directory,ChannelSftp channelSftp) {

    boolean isDirExistFlag = false;

    try {

    SftpATTRS sftpATTRS = channelSftp.lstat(directory);

    isDirExistFlag = true;

    return sftpATTRS.isDir();

    } catch (Exception e) {

    if (e.getMessage().toLowerCase().equals("no such file")) {

    isDirExistFlag = false;

    }

    }

    return isDirExistFlag;

    }

    }

    属性我都写在Spring的配置文件里面了。将这个类托管给spring容器。

    如果在普通类里面使用这个类,就需要看一下上篇博客了。哈哈。

    总结

    在我们使用的时候,主要调uploadFile这个方法即可。传递File文件,目标路径及文件名称。

    相关文章

    总结

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

    展开全文
  • Java实现上传文件到服务器指定目录方法发布时间:2020-08-03 10:49:31来源:亿速云阅读:74作者:小猪这篇文章主要讲解了Java实现上传文件到服务器指定目录方法,内容清晰明了,对此有兴趣小伙伴可以学习一下...
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...
  • 使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。 具体实现 引入pom <dependency> <groupId&...
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...
  • 前言需求使用freemarker生成静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现,奈何老连接不上,改用jsch。毕竟有现成就很舒服,在此介绍给大家。具体实现引入pomch.ethz.ganymedganymed-ssh...
  • 如何分,利用强大js库,来减轻我们工作,市场已经能有关于大文件分块轮子,虽然程序员天性曾迫使我重新造轮子。但是因为时间关系还有工作关系,我只能罢休了。最后我选择了百度WebUploader来实现...
  • 如何分,利用强大js库,来减轻我们工作,市场已经能有关于大文件分块轮子,虽然程序员天性曾迫使我重新造轮子。但是因为时间关系还有工作关系,我只能罢休了。最后我选择了百度WebUploader...
  • 如何分,利用强大js库,来减轻我们工作,市场已经能有关于大文件分块轮子,虽然程序员天性曾迫使我重新造轮子。但是因为时间关系还有工作关系,我只能罢休了。最后我选择了百度WebUploader来实现...
  • 实践:对samba服务器上的操作无外乎2种:一种是从Samba服务器上下载某文件到本地目录,一种是上传本地文件到Samba服务器上指定目录,为此我们写了一个工具类,来完成这两件事情。package com.ch...
  • 引入: 在我们昨天架设好了...对samba服务器上的操作无外乎2种:一种是从Samba服务器上下载某文件到本地目录,一种是上传本地文件到Samba服务器上指定目录,为此我们写了一个工具类,来完成这两件事情。 package ...
  • 开篇最近公司开发微服务项目多了,开发出来项目各个百十来M,而且是用服务器上传服务器的时候上传半天。恨得我压根直痒痒!所以只好看看有没有使jar包瘦身方法。结果一搜还真得挺多!今天就拿一个网上...
  • 引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户...对samba服务器上的操作无外乎2种:一种是从Samba服务器上下载某文件到本地目录,一种是上传本地文件到Samba服务器上指定目录,为此我们写了一个...
  • 说明 如果你是在利用java的FTPClient上传...楼主最近在和别人搞项目,负责是将上传图片资源利用FTPClient上传到Nginx服务器的指定位置,刚开始,根据教程在centos下载FTP,配置完用户后,能正常上传文件到linux...
  • 使用场景:为了解决高并发问题,尤其带宽限制(阿里云最高200M,当前首页一个用户请求4M资源,导致带宽跟不),jenkins打包vue下前端静态资源上传到阿里云OSS 前提工作:因工具是java开发,所以提前在ECS...
  • 一篇介绍了Java web项目中把客户端上传的图片保存到服务器中web工程下的指定文件夹里,但是这样存在一个弊端:因为保存图片文件夹在项目工程文件下,所以,当项目文件更新版本时候,就会覆盖掉原来保存图片...
  • 文件上传漏洞就是利用网页代码中文件上传路径变量过滤不严将可执行的文件上传到一个到服务器中,再通过URL去访问以执行恶意代码。二、检测与绕过客户端检测(Javascript检测)在网页写一段Javascript脚本,校验...
  • 一篇介绍了Java web项目中把客户端上传的图片保存到服务器中web工程下的指定文件夹里,但是这样存在一个弊端:因为保存图片文件夹在项目工程文件下,所以,当项目文件更新版本时候,就会覆盖掉原来保存图片...
  • 在最近一个项目接触到一个上传图片的功能,主要是前段选择图片,点击上传,后台接收到图片进行连接到远程的服务器进行上传到指定的路径,中间使用了JSch包进行图片的上传以及连接服务器。遇到一个Kerberos口令...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 254
精华内容 101
关键字:

java文件上传到指定的服务器上

java 订阅