ftp协议与文件的上传与下载 ,以及filezilla连接ftp

ftp:
ftp是一个协议和http协议都是叫协议
tcp和udp也是协议
ftp是文件(以流的形式进行传输)传输协议(针对于文件进行上传和下载)

0、一些细节问题的解答方案:

    1.如果ftp服务器有多台,服务器端无法识别问题:
	1.1.在user表中添加字段(ftp_server)-->根据用户上传的ftp的编号进行update该字段
	1.2.在user表中有一个字段(head_pic)-->存入的图片所在ftp服务器的路径-->查询到该路径使用subString进行截取服务器的IP地址
2.文件名的重复:
	使用用户的id+当前时间的毫秒数+任意的随机数
3.文件存放不规律不方便后期的查询和维护:
	可以根据当前日期进行分文件夹
	2019/08/31--->2019年8月31号所存的图片/文件
		--->pic
		--->file
			--->编写过滤器(过滤所有的图片的后缀)-->返回如果为true--->存入file-->否则存入pic

ftp的配置:(nginx一起使用,保证项目的安全性)
要求:

	所有的ftp服务器都不能叫ftp
	linux的用户名不能叫ftp,就会和ftp的安装冲突,导致ftp无法启动
	在新的linux配置中,HOSTNAME也不能叫ftp

1.检测linux上是否已经安装了ftp

	rpm -qa | grep vsftpd

在linux服务器上ftp叫vsftpd
如果什么都没有显示,则说明linux上没有安装过ftp
2.安装ftp

         yum -y install vsftpd

看到以下信息说明安装成功:

	  Running Transaction
	  Installing : vsftpd-2.2.2-24.el6.x86_64                                                                         1/1 
	  Verifying  : vsftpd-2.2.2-24.el6.x86_64                                                                         1/1 
	Installed:
	  vsftpd.x86_64 0:2.2.2-24.el6                                                            
	Complete!

3.启动ftp(和防火墙一样)

    service vsftpd start 启动
	service vsftpd stop 停止
	service vsftpd restart 重启
	看到以下信息说明启动成功:
		Starting vsftpd for vsftpd:                                [  OK  ]

4.设置ftp的开机启动

	chkconfig vsftpd on

5.配置ftp

	linux会在ftp默认安装在/etc目录
	vsftpd的conf目录进行配置
	vi /etc/vsftpd/vsftpd.conf
			# 禁止匿名用户anonymous登录
			anonymous_enable=NO
			# 允许本地用户登录
			local_enable=YES
			# 让登录的用户有写权限(上传,删除)
			write_enable=YES
			# 默认umask
			local_umask=022
			# 把传输记录的日志保存到/var/log/vsftpd.log
			xferlog_enable=YES
			xferlog_file=/var/log/vsftpd.log
			xferlog_std_format=NO
			# 允许ASCII模式上传
			ascii_upload_enable=YES 
			# 允许ASCII模式下载
			ascii_download_enable=YES
			# 使用20号端口传输数据
			connect_from_port_20=YES
			# 欢迎标语
			ftpd_banner=Welcome to use my test ftp server.
			# 接下来的三条配置很重要
			# chroot_local_user设置了YES,那么所有的用户默认将被chroot,
			# 也就用户目录被限制在了自己的home下,无法向上改变目录。
			# chroot_list_enable设置了YES,即让chroot用户列表有效。
			# ★超重要:如果chroot_local_user设置了YES,那么chroot_list_file
			# 设置的文件里,是不被chroot的用户(可以向上改变目录)
			# ★超重要:如果chroot_local_user设置了NO,那么chroot_list_filese
			# 设置的文件里,是被chroot的用户(无法向上改变目录)
			chroot_local_user=NO(!!!!!有坑,当使用Java去连接ftp并上传的时候,如果为YES,不会自动创建文件的目录信息)
			chroot_list_enable=YES
			# touch /etc/vsftpd/chroot_list 新建(需要手动创建)
			chroot_list_file=/etc/vsftpd/chroot_list
			# 以standalone模式在ipv4上运行
			listen=YES
			# PAM认证服务名,这里默认是vsftpd,在安装vsftpd的时候已经创建了这个pam文件,
			# 在/etc/pam.d/vsftpd,根据这个pam文件里的设置,/etc/vsftpd/ftpusers
			# 文件里的用户将禁止登录ftp服务器,比如root这样敏感的用户,所以你要禁止别的用户
			# 登录的时候,也可以把该用户追加到/etc/vsftpd/ftpusers里。
			pam_service_name=vsftpd

6.重启ftp0

	service vsftpd restart
	看到以下信息说明重启成功:
		Shutting down vsftpd:                                      [  OK  ]
		Starting vsftpd for vsftpd:                                [  OK  ]

7.执行以下5个命令,让刚才配置生效

	这个五个命令 ,比较慢,一个一个的来,如果你输入命令后没有动静,一定不要关闭页面,
	继续等待,两到三分种还没有跳出,让你在次输入的行,你在重新关闭,建议直接复制
	getsebool -a | grep ftpd
	setsebool -P ftp_home_dir 1
	setsebool -P allow_ftpd_full_access 1
	setsebool -P allow_ftpd_use_cifs 1
	setsebool -P allow_ftpd_use_nfs 1

8.创建ftp用户

	useradd ftp的用户名(ftpuser) -s /sbin/nologin -d /home/ftp(手动编写,home目录下并没有ftp文件夹)
	/home/ftp-->将来用户上传文件的时候所到根目录

9.为ftp用户设置密码

	passwd ftp的用户名 例如:(ftpuser) 回车

看到以下信息说明设置密码成功:

		Changing password for user ftpuser.
		New password: 
		BAD PASSWORD: it is too simplistic/systematic
		BAD PASSWORD: is too simple
		Retype new password: 
		passwd: all authentication tokens updated successfully.

10.filezilla连接ftp

    filezze中的主机名就是这个虚拟机的名字,用户名,密码就是你刚创建的ftp用户名,和密码, 端口号不用填写,
    直接就可以连接,默认的是21,可以不写
	所有的ftp目录下必须要使用ftpuser这个用户创建文件夹和文件,不能再使用root,可能造成无法识别(root用户没有权限)

配置nginx:

1.使用xftp把nginx上传到linux服务器上
2.解压nginx
	tar -zxvf xxxx
3.创建快捷方式
	进入nginx目录中进行创建
	首先安装nginx所必须的配置包
	yum -y install gcc pcre-devel openssl openssl-devel
	./configure --prefix=/usr/local/nginx-1.17.3
4.编译nginx
	make && e install
5.修改nginx的配置
	/usr/local/nginx-1.17.3/conf目录修改
	vim nginx.conf
	把一行的user注解打开
		user  nobody;--->user 	root
	不要删除location /标签中的任何东西
	location / {
		root(访问的根目录)  /home/ftp/www;
	}
6.启动nginx
	./nginx
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Apache Commons Net库来实现Java从FTP服务器下载文件的操作。以下是一个简单的示例代码: ```java import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class FTPDownloadExample { public static void main(String[] args) { String server = "your.ftp.server.com"; int port = 21; String username = "your-username"; String password = "your-password"; String remoteFilePath = "/path/to/remote/file.txt"; String localFilePath = "/path/to/local/file.txt"; FTPClient ftpClient = new FTPClient(); try { // 连接FTP服务器 ftpClient.connect(server, port); ftpClient.login(username, password); // 设置文件类型为二进制文件 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 创建本地文件输出流 OutputStream outputStream = new FileOutputStream(localFilePath); // 下载文件到本地 ftpClient.retrieveFile(remoteFilePath, outputStream); // 关闭流和连接 outputStream.close(); ftpClient.logout(); ftpClient.disconnect(); } catch (IOException ex) { ex.printStackTrace(); } } } ``` 上述代码中,需要替换以下变量的值: - `server`:FTP服务器主机名或IP地址。 - `port`:FTP服务器端口号,默认为21。 - `username`:FTP服务器登录用户名。 - `password`:FTP服务器登录密码。 - `remoteFilePath`:要下载的远程文件路径。 - `localFilePath`:要保存到本地的文件路径。 需要注意的是,如果要下载文件是文本文件,应该将文件类型设置为ASCII类型(`ftpClient.setFileType(FTP.ASCII_FILE_TYPE)`)。如果要下载文件是二进制文件,应该将文件类型设置为二进制类型(`ftpClient.setFileType(FTP.BINARY_FILE_TYPE)`)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值