CentOS7环境下使用Nginx搭建静态资源服务器

CentOS7环境下使用Nginx搭建静态资源服务器

文章目录

  • CentOS7环境下使用Nginx搭建静态资源服务器
    • 建立FTP连接完成文件上传
      • 创建用户(用于ftp连接登陆)
      • 在服务器上安装vsftpd
      • 给新建用户文件夹授权
      • 创建资源文件夹
    • 使用Nginx建立映射
      • 下载Nginx
      • 解压
      • 配置
      • 编译
      • 启动
      • 配置映射
    • 通过网络访问Nginx,拿到文件
      • 主机:端口/images/文件名
    • 通过Java完成图片上传
      • 导入依赖
      • 写工具类
      • 配置文件处理器
      • 方法调用

建立FTP连接完成文件上传

创建用户(用于ftp连接登陆)

# useradd ftpuser
# passwd ftpuser

注:输入密码不能少于8位,需要输入两遍

在服务器上安装vsftpd

# yum -y install vsftpd
# ifconfig
# service vsftpd start

注:运行vsftpd后可能会还是无法正常访问,这时需要配置下防火墙和vsftpd的配置文件,详情参考下面这篇博文:https://blog.csdn.net/jiftlixu/article/details/54344050

给新建用户文件夹授权

# chmod 777 -R /home/ftpuser

注:如果不授权nginx访问时会权限不足,无法加载资源

创建资源文件夹

# mkdir /home/ftpuser/resourse/images

使用Nginx建立映射

下载Nginx

# wget http://nginx.org/download/nginx-1.12.2.tar.gz

解压

tar -zxvf nginx-1.12.2.tar.gz

配置

# cd nginx-1.12.2
# ./configure

编译

# make
# make install

启动

# cd /usr/local/nginx/sbin/

跳转到sbin目录

# ./nginx

启动运行
启动过程中可能会遇到一些环境问题,参考下面这篇博文解决:
https://www.cnblogs.com/itdragon/p/7850985.html

配置映射

# cd ..
# cd conf/
# vi nginx.conf
#添加映射关系
location /images/ {
  root  /home/ftpuser/resourse/; #映射到/home/ftpuser/resourse/images/目录下
  autoindex on;#开启浏览功能
}

通过网络访问Nginx,拿到文件

主机:端口/images/文件名

通过Java完成图片上传

导入依赖



   commons-fileupload
   commons-fileupload


   commons-net
   commons-net
   3.6

写工具类

public class FtpUtil {
    //资源服务器主机
    private final static String HOSTNAME = "主机";
    //ftp连接使用端口
    private final static int PORT = 21;

    private final static String BASE_FILE_URL = "返回图片的网络主机地址";
    private final static String BASE_FILE_STORE_PATH = "/home/ftpuser/resourse/";
    private final static String USERNAME = "ftpuser";
    private final static String PASSWORD = "密码";
    private final static String[] FILE_RELATIVE_PATHS = {"/images/", "/video/", "/pdf/", "/music/"};
    private final static String OTHER_FILE_RELATIVE_PATH = "/other/";
    private final static Map SUFFIX_RELATIVE_PATH_MAP = new HashMap(8, 1) {
        {
            put(".png", FILE_RELATIVE_PATHS[0]);
            put(".jpg", FILE_RELATIVE_PATHS[0]);
            put(".mp4", FILE_RELATIVE_PATHS[1]);
            put(".pdf", FILE_RELATIVE_PATHS[2]);
            put(".mp3", FILE_RELATIVE_PATHS[3]);
        }
    };

    public static String upload(InputStream fileInputStream, String fileName) {
        //非空判断
        if (fileName == null) {
            return null;
        }
        //将原始文件名转换为uuidName,并做了后缀名lowercase处理
        fileName = getUUIDFileName(fileName);

        //文件类型处理,文件路径初始化
        String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
        String suffixRelativePath = SUFFIX_RELATIVE_PATH_MAP.get(fileSuffix.toLowerCase());

        //增加上传所有文件类型到功能
        if (suffixRelativePath == null) {
            suffixRelativePath = OTHER_FILE_RELATIVE_PATH;
        }
        String fileUrl = BASE_FILE_URL + suffixRelativePath + fileName;

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

        try {
            //链接ftp服务器
            ftpClient.connect(HOSTNAME, PORT);
            //登录ftp
            ftpClient.login(USERNAME, PASSWORD);
            int replyCode = ftpClient.getReplyCode();
            //如果reply返回230就算成功了,如果返回530密码用户名错误
            if (!FTPReply.isPositiveCompletion(replyCode)) {
                ftpClient.disconnect();
                System.out.println("文件服务器连接失败,replyCode: " + replyCode);
                return null;
            }

            //ftp参数设置
            ftpClient.setControlEncoding("UTF-8");
            ftpClient.enterLocalPassiveMode();
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.changeWorkingDirectory(BASE_FILE_STORE_PATH + suffixRelativePath);
            //传输
            boolean storeSuccess = ftpClient.storeFile(fileName, fileInputStream);
            try {
                if (!storeSuccess) {
                    System.out.println("上传失败:" + ftpClient.getReplyString());
                    return null;
                } else {
                    return fileUrl;
                }
            } finally {
                fileInputStream.close();
                ftpClient.logout();
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } finally {
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                } catch (IOException ioe) {
                    ioe.printStackTrace();
                }
            }
        }
    }

    private static String getUUIDFileName(String originalFilename) {
        return System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
    }
}

配置文件处理器

@Configuration
public class FileUpload {
	 @Bean
		public MultipartResolver multipartResolver() {
			 CommonsMultipartResolver resolver=new CommonsMultipartResolver();
			 resolver.setDefaultEncoding("UTF-8");//设置编码
			 resolver.setMaxUploadSize(1000*1024);//设置图片大小
			 return resolver;
		}
}

方法调用

@PostMapping("/fileUpload")
@ResponseBody
public ResponseResult fileUpload(@RequestParam("前端文件上传名") MultipartFile file, HttpServletRequest req) throws IllegalStateException, Exception{
    String fileURL = FtpUtil.upload(file.getInputStream(), file.getOriginalFilename());
    return new ResponseResult(200, 10, "ok", fileURL);
}

你可能感兴趣的:(CentOS7环境下使用Nginx搭建静态资源服务器)