**

一、使用docker 安装 vsftpd**

参考文档:https://blog.csdn.net/qq_41201816/article/details/83930133
使用docker部署文件服务器:

1.1 获取镜像

#寻找vsftpd的镜像

1.1.1.docker search vsftpd

在这里插入图片描述

1.1.2.docker pull fauria/vsftpd

在这里插入图片描述

1.2 创建vsftpd容器

docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 -v /Ftpfile:/home/vsftpd -e FTP_USER=连接用户名 -e FTP_PASS=连接密码 -e PASV_ADDRESS=你的ip -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
在这里插入图片描述

注释说明:
#FTP_USER : 设置远程连接的账户名
#FTP_PASS : 远程连接的密码
#-p进行端口绑定映射
-v进行文件目录的映射 FTP_UESR 和FTP_PASS如果设定了会在container里面的
#/etc/vsftpd/virtual_users.txt
#PASV_MIN_PORT和PASV_MAX_PORT映射的是被动模式下端口使用范围
#PASV_ADDRESS指的的宿主机地址

1.3 修改配置

1、我们先进入container里面
docker exec -i -t vsftpd bash
2、修改并生成虚拟用户模式下的用户db文件
vi /etc/vsftpd/virtual_users.txt
#编辑配置文件写入用户跟密码
3、假如我们添加了user用户
mkdir /home/vsftpd/user #建立新用户文件夹
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
#把登录的验证信息写入数据库

1.4 重启,使用Xftp验证连接

先退出容器 :Ctrl +d
重启vsftpd 服务: docker restart vsftpd

二、Java 实现文件上传**

2.1 引入maven 依赖

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

2.2 编写文件上传方法

/**

  • 保存图片到文件服务器

  • @param file

  • @return
    */
    public static String uploadImageToFileServer(MultipartFile file) {

         if(file.getSize() > EViewConstant.FtpFileServer.SIZE){
             log.info("上传的文件大小超过10mb");
             return  "";
         }
         InputStream inputStream = null;
     
         String fileName = file.getOriginalFilename();
         //获取文件的格式
         String fileType = fileName.substring(fileName.indexOf(".")).toLowerCase().trim();
         //生成一个随机的文件名,避免重名覆盖
         String randomString= UUID.randomUUID().toString().replaceAll("-","");
         String fileNewName = randomString+fileType;
     
         FTPClient ftpClient = new FTPClient();
         try{
             //连接到FTP 服务器
             ftpClient.connect(EViewConstant.FtpFileServer.HOST, EViewConstant.FtpFileServer.PORT);
             ftpClient.login(EViewConstant.FtpFileServer.USER_NAME,EViewConstant.FtpFileServer.PASSWORD);
             //ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
             ftpClient.changeWorkingDirectory("/Ftpfile/eiot");
             //ftp上传文件是以文本形式传输的,所以多媒体文件会失真,需要转为二进制形式传输
             ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
             if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                 log.info("未连接到FTP,用户名或密码错误。");
                 ftpClient.disconnect();
             } else {
                 log.info("FTP连接成功");
             }
             long start = System.currentTimeMillis();
             inputStream = file.getInputStream();
             //转码后可以文件名可以为中文ftpClient.storeFile(new String(fileNewName.getBytes("GBK"), "iso-8859-1"), inputStream);
            // ftpClient.enterLocalPassiveMode();
             boolean fig = ftpClient.storeFile(fileNewName, inputStream);
             if(fig){
                 long end = System.currentTimeMillis();
                 log.info(String.format("文件:%s上传成功,耗时:%d毫秒",fileNewName,(end-start)));
             }else {
                 log.info("上传失败");
                 return  "";
             }
         }catch (IOException io){
              io.printStackTrace();
              log.error("保存图片到文件服务器ERROR:"+io.getMessage());
              return  "";
         }finally {
             //关闭资源
             try {
                 if(null != inputStream){
                     inputStream.close();
                 }
                 //退出
                 ftpClient.logout();
                 //断开连接
                 ftpClient.disconnect();
             }catch (IOException io){
                 log.error("保存图片到文件服务器关闭资源ERROR"+io.getMessage());
             }
         }
         return  EViewConstant.FtpFileServer.IMAGE_URL+fileNewName;
    

}
上传成功
在这里插入图片描述
在这里插入图片描述

三、图片展示

3.1 文件展示需要配置nginx 的配置文件

/etc/nginx/conf.d
vi default.conf
增加一个server配置
在这里插入图片描述
#图片配置
server{
listen 90;
server_name localhost;
location ~ .(gif|jpg|jpeg|png|bmp|swf)$ {
root /Ftpfile;
proxy_temp_path /Ftpfile;
}
}
设置nginx 访问权限(修改为root):
在这里插入图片描述
浏览器地址直接输入:ip +端口+图片路径
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐