Java-项目中FTP服务器搭建笔记

282 阅读1分钟

1.为什么使用FTP服务器?

  其实我们完全可以通过http上传文件或者图片,后台用tomcat接收流,然后保存到服务器的磁盘的某个位置,前端再通过请求后端接口,后台再将文件转化流传到前端,从而完成文件上传下载功能。

  那为什么我们还要ftp服务器?ftp协议是相对于http协议的一种文件传输协议。这种协议在文件大于1M是时的传输速度是大于http协议。通过对ftp服务器的构建可以使文件独立存放。通过下载ftp客户端可方便进行文件的管理。安全性高,可以进行数据的加密传输。

2.实现思路

3.代码示例

@Component
public class FTPUtils {

    private static final Logger logger = LoggerFactory.getLogger(FTPUtils.class);

    @Value("${ftp.url}")
    private  String ftpURL;

    @Value("${ftp.port}")
    private  int ftpPort;

    @Value("${ftp.username}")
    private  String ftpUsername;
    @Value("${ftp.password}")
    private  String ftpPassword;

    @Value("${ftp.directory}")
    private  String ftpDirectory;

    @Value("${nginx.url}")
    private  String nginxUrl;

    private  FTPClient ftpClient;


    public  void connect() throws IOException {
            FTPClient ftpClient1 = new FTPClient();
            logger.info("connecting ftpserver .."+ftpURL);
            ftpClient1.connect(ftpURL, ftpPort);
            ftpClient1.login(ftpUsername, ftpPassword);
            ftpClient1.changeWorkingDirectory(ftpDirectory);
            ftpClient1.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient1.setDataTimeout(30000);
            ftpClient1.setConnectTimeout(30000);
            ftpClient = ftpClient1;
    }

    public  String storeImg(InputStream inputStream) throws IOException {
        String fileName = generateRandomFilename();
        ftpClient.storeFile(fileName + ".jpg", inputStream);
        String imgUrl = nginxUrl + fileName + ".jpg";
        return imgUrl;
    }
    public  void logout() throws IOException {
        if (null != ftpClient) {
            ftpClient.logout();
        }
    }

    private  String generateRandomFilename() {
        String RandomFilename = "";
        Random rand = new Random();//生成随机数
        int random = rand.nextInt();
        Calendar calCurrent = Calendar.getInstance();
        int intDay = calCurrent.get(Calendar.DATE);
        int intMonth = calCurrent.get(Calendar.MONTH) + 1;
        int intYear = calCurrent.get(Calendar.YEAR);
        String now = String.valueOf(intYear) + "_" + String.valueOf(intMonth) + "_" +
                String.valueOf(intDay) + "_";
        RandomFilename = now + String.valueOf(random > 0 ? random : (-1) * random);
        return RandomFilename;
    }


    public String storeAttachment(String name, InputStream inputStream) throws IOException {
        ftpClient.storeFile(name, inputStream);
        StringBuilder stringBuilder = new StringBuilder();
        String ftpUrl = stringBuilder.append("ftp://").append(ftpURL).append("/pub/").append(name).toString();
        return ftpUrl;
    }

    public boolean isConnect(){
        if (null != ftpClient) {
            boolean connected = ftpClient.isConnected();
            return connected;
        }
        return false;
    }

    public void disConnect() throws IOException {
        ftpClient.disconnect();

    }
}