springboot集成ftp实现文件上传 springboot集成ftp实现文件上传

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

springboot集成ftp实现文件上传 springboot集成ftp实现文件上传

张兵游勇   2021-05-19 我要评论
想了解springboot集成ftp实现文件上传的相关内容吗,张兵游勇在本文为您仔细讲解springboot集成ftp实现文件上传的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:springboot集成ftp文件上传,springboot文件上传,springboot集成ftp上传,下面大家一起来学习吧。

1、FileUtil

package io.renren.modules.oss.utils;


import org.apache.commons.net.ftp.FTPClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class FileUtil {

  //ftp服务器ip地址
  @Value("${custom.config.file-server.ip}") // 相关配置放在application.properties 中
    String FTP_ADDRESS;
  //端口号
  @Value("${custom.config.file-server.port}")
  Integer FTP_PORT;
  //用户名
  @Value("${custom.config.file-ftp-user}")
  String FTP_USERNAME;
  //密码
  @Value("${custom.config.file-ftp-password}")
  String FTP_PASSWORD;
  //图片路径
  @Value("${custom.config.file-savepath}")
  String FTP_BASEPATH;

  //根据当前文件生成 文件夹
  private static String getTimePath() {
    Date now = new Date();

    DateFormat format = new SimpleDateFormat("yyyy/MM/dd/");
    return format.format(now);
  }


  public String upload(InputStream inputStream, String originName) {

    StringBuilder url = new StringBuilder();

    FTPClient ftp = new FTPClient();
    ftp.setControlEncoding("GBK");
    try {
      int reply;
      ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
      ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
      reply = ftp.getReplyCode();
      System.out.println("reply:" + reply);

      ftp.enterLocalPassiveMode();//开启被动模式,否则文件上传不成功,也不报错

      String timePath = getTimePath();
      String saveDir = FTP_BASEPATH + timePath;
      url.append(saveDir);

      ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
      createDir(ftp, saveDir);
      //ftp.makeDirectory(saveDir);
      //   ftp.changeWorkingDirectory(FTP_BASEPATH);
      originName= System.currentTimeMillis()+originName.substring(originName.lastIndexOf('.'));
      url.append(originName);
      ftp.storeFile(originName, inputStream);
      inputStream.close();
      ftp.logout();

    } catch (IOException e) {
      throw new RuntimeException("文件上传失败");
    } finally {
      if (ftp.isConnected()) {
        try {
          ftp.disconnect();
        } catch (IOException ioe) {
        }
      }
    }

    return url.toString();
  }

  // 创建文件夹,并切换到该文件夹
  // 比如: hello/test
  //最终会切换到test 文件夹返回
  private void createDir(FTPClient client, String path) throws IOException {
    String[] dirs = path.split("/");
    for (String dir : dirs) {
      if (StringUtils.isEmpty(dir)) {
        continue;
      }
      if (!client.changeWorkingDirectory(dir)) {
        client.makeDirectory(dir);
      }
      client.changeWorkingDirectory(dir);
    }
  }

}

2、application.properties

#//ftp服务器ip地址
custom.config.file-server.ip=111.229.65.208
#String FTP_ADDRESS;
#//端口号
custom.config.file-server.port=21
#Integer FTP_PORT;
#//用户名
custom.config.file-ftp-user=root
#String FTP_USERNAME;
#//密码
custom.config.file-ftp-password=123456
#String FTP_PASSWORD;
#//图片路径
custom.config.file-savepath=/upload
#String FTP_BASEPATH;

3、UploadController

 /**
  * 上传文件
  */
String fileUrl = fileUtil.upload(file.getInputStream(), file.getOriginalFilename());

得到路径:/upload2020/11/23/1606122890137.jpg

4、ftp查看

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们