美文网首页
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;
    }
}

相关文章

  • 阿里云服务器java连接ftp服务器时候530 Login in

    ftp服务器是:vsftpd的搭建的。 在使用ftp用户通过java代码上传文件的时候,本地正常的已上传到阿里云服...

  • vsftp上传权限不够问题解决

    linux上使用vsftp搭建ftp服务器,搭建好了以后,使用客户端上传文件往往提示权限不足,这时要在配置文件里设...

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

    安装前先检查是否已经安装了FTP,检查命令: 安装ftp 启动ftp 在启动ftp的时候可能会出现启动失败的错误(...

  • linux搭建ftp

    Centos7 命令使用总结 java完成ftp传输(将文件上传至静态资源服务器) ftp一些概念了解 Linux...

  • linux搭建ftp

    Centos7 命令使用总结 java完成ftp传输(将文件上传至静态资源服务器) ftp一些概念了解 Linux...

  • Linux搭建FTP文件服务器

    windows系统的文件,如何上传到Linux服务器呢?可以通过FTP,实现相互之间共享文件。 一、安装vsftp...

  • FTP

    FTP 一.FTP简介和原理 FTP即文件传输协议, CS架构, Linux下搭建ftp服务器需要安装vsftpd...

  • ftp服务搭建与使用

    一 ftp服务器搭建 安装vsftpd软件(用于文件的上传和下载) 修改配置文件 重启服务 二 ftp客户端使用 ...

  • 如何在linux命令行中使用ftp命令上传和下载文件

    这里介绍在 Linux shell 中如何使用 ftp 命令。包括如何连接 FTP 服务器,上传或下载文件以及创建...

  • python生成简单的FTP弱口令扫描

    前言 Ftp这个类实现了Ftp客户端的大多数功能,比如连接Ftp服务器、查看服务器中的文件、上传、下载文件等功能,...

网友评论

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

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