搭建ftp文件服务器

一搭建ftp服务器:

(一)  切换到root用户:su root centos开桥接模式。

输入密码:xxxxx 

(二):修改/etc/vsftpd/vsftpd.conf文件下的属性

(三):YES/NO 分别表示允许或是不允许匿名访问

(四) : 添加用户与设置密码,登陆后默认的路径是/home/ftpuser.

(五):查看外网访问权限

(六)修改让外网可以访问

执行如下图所示的指令,开启外网访问权限。

(七)关闭防火墙

访问测试:ftpuser就是linux的系统用户

在windows服务器下新建文件夹

此时切换到ftpuser用户在。

启动ftp命令  #servicevsftpd start

停止ftp命令  #servicevsftpd stop

重启ftp命令  #servicevsftpd restart

(二)java客户端ftp文件上传:

在home/ftpuser下就能看到文件夹

创建文件夹时要注意是在root用户创建的文件的话,普通用户是无权访问的如上图ftpuser登录是无权访问的,只有自己创建的文件夹,才有文件上传的权限。

二:java客户端上传与下载文件

package com.yonyou.common.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
 * 
 * @author Administrator
 *
 */
public class FtpUtil {

	/** 
	 * Description: 向FTP服务器上传文件
	 * @param host FTP服务器主机地址
	 * @param port FTP服务器端号
	 * @param username FTP登录账号/linux用户 名
	 * @param password FTP登录密码 /linux密码
	 * @param basePath linux用户下的文件路径
	 * @param filePath 文件夹路径
	 * @param filename 上传到FTP服务器上的文件名 
	 * @param input 文件输入流 
	 * @return 成功返回true,否则返回false 
	 */  
	public static boolean uploadFile(String host, int port, String username, String password, String basePath,
			String filePath, String filename, InputStream input) throws Exception {
		boolean result = false;
		FTPClient ftp = new FTPClient();
	
			int reply;
			ftp.connect(host, port);// 连接FTP服务器
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务端口
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			//切换到上传路径下
			boolean change = ftp.changeWorkingDirectory(basePath+filePath);
			//切换到上传目目录
			if (false==change) {
				//如果目录不存在创建目目录
				String[] dirs = filePath.split("/");
				String tempPath = basePath;
				for (String dir : dirs) {
					if (null == dir || "".equals(dir)) continue;
					tempPath += "/" + dir;
					if (!ftp.changeWorkingDirectory(tempPath)) {
						if (!ftp.makeDirectory(tempPath)) {
							return result;
						} else {
							ftp.changeWorkingDirectory(tempPath);
						}
					}
				}
			}
			//设置上传文件的类型为二进制类型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			boolean storeFile=true;
			try{
			storeFile = ftp.storeFile(new String(filename), input);
			}catch(Exception e){
				e.printStackTrace();
			}
			if(false==storeFile){
				return false;
			}
		
			input.close();
			ftp.logout();
			result = true;
	
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		
		return result;
	}
	
	/** 
	 * Description: 从FTP服务器下载文件
	 * @param host FTP服务器hostname 
	 * @param port FTP服务器端口
	 * @param username FTP登录账号 
	 * @param password FTP登录密码 
	 * @param remotePath FTP服务器上的相对路径
	 * @param fileName 要下载的文件名
	 * @param localPath 下载后保存到本地的路径
	 * @return 
	 */  
	public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
			String fileName, String localPath) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);
			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务�?
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录下
			FTPFile[] fs = ftp.listFiles();
			for (FTPFile ff : fs) {
				if (ff.getName().equals(fileName)) {
					File localFile = new File(localPath + "/" + ff.getName());
					OutputStream is = new FileOutputStream(localFile);
					ftp.retrieveFile(ff.getName(), is);
					is.close();
				}
			}

			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}
	
	public static void main(String[] args) {
		try {  
	        FileInputStream in=new FileInputStream(new File("C:/Users/worn/Desktop/0P91Z1S01.jpg"));  
	        try{
	         boolean flag = uploadFile("192.168.1.121", 21, "ftpuser", "ftpuser", "/home/ftpuser/","xiao", "0P91Z1S01.jpg", in);  
	         System.out.println(flag);
	        }catch(Exception e){
	        	e.printStackTrace();
	        }
	          
	    } catch (FileNotFoundException e) {  
	        e.printStackTrace();  
	    }  
	}
}

三:搭建nginx服务器,访问文件。

上传nginx服务器。由于nginx依赖于pcre和zlib,所以在安装nginx时,需要先安装pcre和zlib,OpenSSL。

                 PCRE(PerlCompatibleRegular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginxhttp模块使用pcre来解析正则表达式,所以需要在linux上安装pcre

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlibhttp包的内容进行gzip,所以需要在linux上安装zlib库。

  OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

         nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl

一:首先创建ngixn的临时目录:

进入nginx

执行下面的脚本,创建makefile文件 
./configure
--prefix=/usr/local/nginx 
--pid-path=/var/run/nginx/nginx.pid 
--lock-path=/var/lock/nginx.lock
--error-log-path=/var/log/nginx/error.log 
--http-log-path=/var/log/nginx/access.log 
--with-http_gzip_static_module 
--http-client-body-temp-path=/var/temp/nginx/client
--http-proxy-temp-path=/var/temp/nginx/proxy
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
--http-scgi-temp-path=/var/temp/nginx/scgi  

接下来

编译

安装

进入nginx目录

可以执行如下指令来控制nginx的启动与停止:

./nginx  //启动

./nginx -s stop //停止

./nginx -s reload //重启

接下来要检测防火强

查看防火墙状态

1) Linux操作系统中永久性生效,重启后不会复原

开启: chkconfig iptables on

关闭: chkconfig iptables off

2) 即时生效,重启后复原

开启: service iptables start

关闭: service iptables stop

关闭防火墙,接下修改监听端口,并启动nginx, 查看进程

如图所示访问到如下页面nginx启动成功

打开nginx.conf文件配置root地址路径指向我们的ftp文件路径。

地址映射到指定的目录地址,此时访问

报403错误。

这里原因是没有访问权限,所以要在nginx.conf里面配置root用户的权限

接下来我们再来访问图片

发现图片已经可以通过nginx访问图片

再上传一张图片。

项目构建中的意向图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值