美文网首页
linux搭建ftp服务器实现java文件上传

linux搭建ftp服务器实现java文件上传

作者: 二营长家的张大炮 | 来源:发表于2020-04-12 21:25 被阅读0次
    安装前先检查是否已经安装了FTP,检查命令:
    rpm -qa|grep vsftp;
    
    安装ftp
    yum install vsftpd
    
    启动ftp
    service vsftpd start
    

    在启动ftp的时候可能会出现启动失败的错误(我忘记截图了)
    好像是job啥的来着
    解决办法是修改ftp配置文件

    查看ftp状态
    service vsftpd status
    

    设置成开机自启动:chkconfig --level 35 vsftpd on

    注意:此时FTP还不能使用,得安装客户端才能够使用

    到这里下载客户端http://rpm.pbone.net/index.php3/stat/45/idpl/15988817/numer/1/nazwa/ftp

    image.png
    image.png

    下载好之后再服务器新建一个目录 上传刚才下载的客户端 然后进行安装
    我的目录


    image.png

    #######然后安装

    rpm -ivh ftp-0.17-51.1.el6.x86_64.rpm
    
    image.png

    安装完成后,需要先设置用户名密码,执行命令:
    添加用户:

    useradd admin -s /sbin/nologin
    

    设置密码:

    passwd admin
    

    然后进行登陆:数据ftp进入到ftp操作命令里,执行命令oepn ip进入到指定的ftp中,然后输入用户名密码进行登陆


    image.png
    window下连接ftp上传文件

    window+R
    ftp +ip(你服务器的ip)
    账号密码登录
    put+任意文件的地址
    测试上传 然后到你的ftp服务器根目录下看有没有文件


    image.png

    java连接ftp上传文件
    下载依赖

             <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>3.6</version>
            </dependency>
    

    FileUtils工具类

    package com.austshop.austshop.Utils;
    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPReply;
    import org.apache.log4j.Logger;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.*;
    import java.math.BigInteger;
    import java.net.MalformedURLException;
    import java.security.MessageDigest;
    
    /**
     * 计算文件md5值
     */
    public class FileUtils {
    
        private static Logger logger = Logger.getLogger(FileUtils.class);
        // ftp连接客户端
        public static FTPClient ftpClient = null;
        //  用户名
        private static final String ftpUserName = "ftpadmin";
        //  密码
        private static final String ftpPassword = "adminroot123";
        //  主机
        private static final String ftpHost = "自己服务器ip";
        //  端口
        private static final int ftpPort = 21;
        //  文件存储位置
        private static final String ftpPath = "/home/upload";
    
        //    获取文件的md5值
        public static String getFileMD5(MultipartFile file) {
            try {
                byte[] uploadBytes = file.getBytes();
                MessageDigest md5 = MessageDigest.getInstance("MD5");
                byte[] digest = md5.digest(uploadBytes);
                String hashString = new BigInteger(1, digest).toString(16);
                return hashString;
            } catch (Exception e) {
                logger.error(e.toString(), e);
            }
            return null;
        }
    
        /**
         * 初始化ftp服务器
         */
        public static void initFtpClient(String ftpHost, String ftpUserName, String ftpPassword, Integer ftpPort) {
            ftpClient = new FTPClient();
            ftpClient.setControlEncoding("utf-8");
            try {
                //连接ftp服务器
                ftpClient.connect(ftpHost, ftpPort);
                //登录ftp服务器
                ftpClient.login(ftpUserName, ftpPassword);
                //登录服务器响应码
                int replyCode = ftpClient.getReplyCode();
                if (!FTPReply.isPositiveCompletion(replyCode)) {
                    logger.error("connect failed...ftp服务器:" + ftpHost + ":" + ftpPort);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 上传文件
         *
         * @param fileName    上传到ftp的文件名
         * @param inputStream 输入文件流
         * @return
         */
        public static boolean uploadFile(String fileName, InputStream inputStream) {
            // 设置开关
            boolean flag = true;
            try {
                initFtpClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
    
                ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
    
                ftpClient.enterLocalPassiveMode();
    
                ftpClient.makeDirectory(ftpPath);
    
                ftpClient.setControlEncoding("utf-8");
    
                ftpClient.storeFile(fileName, inputStream);
    
                inputStream.close();
    
                ftpClient.logout();
                logger.info("上传文件成功");
            } catch (Exception e) {
                flag = false;
                logger.error("上传文件失败");
                e.printStackTrace();
            } finally {
                if (ftpClient.isConnected()) {
                    try {
                        ftpClient.disconnect();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != inputStream) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return flag;
        }
    }
    
    
    package com.austshop.austshop.service;
    
    import com.austshop.austshop.Utils.FileUtils;
    import com.austshop.austshop.Utils.MD5Utils;
    import com.austshop.austshop.entity.FileInfo;
    import com.austshop.austshop.mapper.FileMapper;
    import com.austshop.austshop.service.impl.IFileService;
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Date;
    import java.util.UUID;
    
    @Service(value = "fileSerice")
    public class FileService implements IFileService {
    
        /**
         * 注入DAO层
         */
        @Autowired
        private FileMapper fileMapper;
    
        private static Logger logger = Logger.getLogger(FileUtils.class);
    
        @Override
        public FileInfo getFileInsert(MultipartFile multipartFile) {
            FileUtils fileUtils = new FileUtils();
    
            // 文件后缀名
            String extension = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().indexOf('.') + 1);
            // 文件前缀名
            String suffix = MD5Utils.md5(multipartFile.getOriginalFilename());
            //  拼接成新的文件名
            String newFileName = suffix + "." + extension;
    
            /**
             * 进行md5校验  如果根据md5查询不到数据就执行新增
             */
            try {
                if (fileUtils.uploadFile(newFileName, multipartFile.getInputStream())) {
                    logger.info("文件" + newFileName + "上传成功");
                } else {
                    logger.info("文件" + newFileName + "上传失败");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            FileInfo fileInfo = new FileInfo();
            if (fileMapper.getFileInfoByMD5(FileUtils.getFileMD5(multipartFile)) == null) {
                fileInfo.setId(UUID.randomUUID().toString().toLowerCase());
                fileInfo.setFileName(newFileName);
                fileInfo.setLength(multipartFile.getSize());
                fileInfo.setMd5(FileUtils.getFileMD5(multipartFile));
                fileInfo.setUrl("http://132.232.66.140:81/" + newFileName);
                fileInfo.setCreate_time(new Date());
                fileMapper.insertFileSelective(fileInfo);
            } else {
                fileInfo = fileMapper.getFileInfoByMD5(FileUtils.getFileMD5(multipartFile));
            }
    
    
            return fileInfo;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:linux搭建ftp服务器实现java文件上传

          本文链接:https://www.haomeiwen.com/subject/pwfimhtx.html