图片服务器vsftpd

2020-04-07

背景:在企业内一般会搭建单独的图片服务器,把图片存储在独立的服务器上,进行独特的优化,提高访问速度。后台程序就需要使用 ftp
把图片上传到图片服务器。用户上传图片到 war,war 上传图片到图片服务器。图片服务器需要安装 ftp 软件,最常用的软件是 vsftpd。

vsftpd 的安装流程:

1.使用 yum 安装

yum install -y vsftpd

2.进入 /etc/vsftpd 目录,分别删除 ftpusers文件中的 root 和 user_list 文件中的 root

cd /etc/vsftpd
rm -f ftpusers/root
rm -f user_list/root

3.使用 systemctl 命令管理 vsftpd

web 程序使用 ftp 上传文件:

1.引入依赖

	<!--web 程序中使用ftp上传文件-->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>

2.在 util 引入 FTPUtils 工具类

package com.laozhang.utils;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @author zhangfan
 * @date 2019/9/23
 */
public class FTPUtils {
    private static final String HOSTNAME = "master";
    private static final Integer PORT = 21;
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";
    private static final String SAVEPATH = "/usr/share/nginx/zycf/images/";

    /**
     * 上传文件
     * @param file 待上传文件
     * @param saveName 上传后的文件名字
     */
    public static void uploadFile(MultipartFile file, String saveName) throws IOException {

        // 创建 ftp 客户端
        FTPClient ftpClient = new FTPClient();

        // 设置字符编码格式为 utf-8
        ftpClient.setControlEncoding("utf-8");

        //连接 ftp 服务器
        ftpClient.connect(HOSTNAME, PORT);

        //登录 ftp 服务器
        ftpClient.login(USERNAME, PASSWORD);

        // 如果登录失败,则断开链接
        if(!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){

            ftpClient.disconnect();//断开连接

            System.out.println("登录失败");

            return;
        }

        // 设置工作模式为上传文件
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

        // 切换到上传目录
        ftpClient.changeWorkingDirectory(SAVEPATH);

        // 上传文件
        ftpClient.storeFile(saveName, file.getInputStream());
    }
}

3.使用 FTPUtils.uploadFile() 方法上传文件

package com.laozhang.service.fileuploadallservice.impl;

import com.laozhang.service.FileUploadAllService;
import com.laozhang.utils.FTPUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * @author zhangfan
 * @date 2019/9/18
 */
@Service
public class FileUploadAllServiceImpl implements FileUploadAllService {

    @Override
    public String upload(MultipartFile file) {
        if(file != null && !file.isEmpty()){
            //获取原文件名
            String fileName = file.getOriginalFilename();
            try {
                //用于服务器上
                FTPUtils.uploadFile(file,fileName);
                //用于自己电脑上
//                file.transferTo(new File("D:/IDEAkongjian/zy-crowd-funding/src/main/webapp/img/" + fileName));
            } catch (IOException e) {
                e.printStackTrace();
            }
            return file.getOriginalFilename();
        }
        return null;
    }
}

上传图片:

把图片保存到 /usr/share/nginx/zycf/images 目录
返回访问地址 http://master/zycf/images/xxx

package com.laozhang.demo.controller;

import com.laozhang.demo.service.FileUploadAllService;
import com.laozhang.demo.vo.ResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**所有文件上传
 * 采用vsftpd技术
 * @author zhangfan
 * @date 2019/10/9
 */
@RestController
public class FileController {

    /**
     * 注入传输文件服务层
     */
    @Autowired
    private FileUploadAllService fileUploadAllService;


    /**
     * 上传文件
     * @param file
     * @return
     */
    @PostMapping("/files")
    public ResponseVo fileUpload(MultipartFile file){

        String fileName = fileUploadAllService.upload(file);

        return new ResponseVo(200,null,"http://master/zycf/images/" + fileName);
    }
}

标题:图片服务器vsftpd
作者:张范
地址:http://misterzhang.top/articles/2020/04/07/1586253468246.html