最近在搞VSFTPD+Nginx结合,但是发现上传文件大小总是为0,

由于最开始在搞的时候不知道主动模式和被动模式到底是什么鬼东西,所以遇到问题根本找不到根的原因,遇到问题只是乱搜,好像是解决了问题,但实际不然。

就像我们最开始的时候,来说下最开始瞎搞的情况吧:

环境:Linux+VSFTPD+FTPClient

想要实现一个,文件上传到服务器的功能,根据百度的VSFTPD搭建,步骤如下

1.安装VSFTPD

2.VSFTPD把配置文件vsftpd.conf里面的anonymous_enable=YES 改为anonymous_enable=NO

3.重启服务 service vsftpd restart

然后呢,就是开始使用FTPClient开始上传文件,但是,问题来了,根本上传不了啊,上传总是失败,文件大小为0.....

接下来你们懂得,就是开始找百度乱搞一气,认为所谓的可行的办法就是把Linux防火墙关闭,然后在FtpClient上传的代码中添加如下代码

ftp.enterLocalPassiveMode();

意思是开启被动模式,别说,还真的可以了,但是这只是表象,你的配置文件你真的知道配置了什么??你到底干了什么?----- 还有,你把Linux防火墙开启你看看还Ok不??肯定凉凉的!(而且生产环境下防火墙基本上不可能会关闭的)



好了,我们要开始解决问题了,一步一步的跟我正确的配置(我们以主动模式为例)

那么大概的说一下什么主动和被动,具体详情百度!!

主动模式(PORT)(Server->Client)
    客户端打开端口N(N为>1024的随机端口)连接服务器21端口建立命令通道;

客户端通过N+1端口与服务器20端口建立数据传输通道。

被动模式(PASV)(Client->Server)
    客户端打开端口N(N为>1024的随机端口)连接服务器21端口建立命令通道(同上);

客户端通过N+1端口与服务器>1024随机端口建立数据传输通道,客户端使用PASV命令。

 

  问题解决步骤:

  1.开放你的21端口可以直接按照你默认的22端口编写,把22原封不动弄一行,然后把复制的22换成21即可(技巧:在22那行按esc,然后按yyp即可复制本行)

  开放完你的21端口后记得重启:service iptables restart

[root@rebirth vsftpd]# vim /etc/sysconfig/iptables

下面的是我的防火墙配置,不需要跟我的全部一样,只需要开启你的21端口即可
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [:]
:FORWARD ACCEPT [:]
:OUTPUT ACCEPT [:]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

  2.首先我们打开vsftpd.conf的配置文件(在你安装的路径) vim vsftpd.conf

  3.在你的vsftpd.conf里面开启主动模式的配置:(如果没有则自己加上去这段命令 一般会有:connect_from_port_20=YES 
     connect_from_port_20=YES   主动模式
     pasv_enable=NO  关闭被动模式

  4..重启vsftpd服务  service vsftpd restart

这时候我们在重新执行我们上传,如果通过FtpClient的话,不要添加开启被动的那句代码:

ftp.enterLocalPassiveMode();

如果此时你的文件直接完整的上传成了那么直接恭喜你!你的问题得以解决!下面的内容你可以选择跳过咯!


如果此时你的文件大小还是为0的话,那么恭喜你,你跟我一样,我们继续搞!

原因是:我们本地的防火墙原因,防火墙的入站规则阻碍了我们

解决方案:

  1.最简单,最直接的就是直接把本地的防火墙全部关闭

再来试试吧!ok完美解决!

   2.如果你不想全部关闭防火墙(我也一样)那么就要稍微配置一些高级的防火墙规则了!跟我来

接下来右键入站规则,点击新建入站规则(由于截图快捷键一按按钮就消失,导图不全谅解哈!)

直接下一步即可

下一步很重要,你可以直接选择默认的配置,任何ip都可以

当然,你是一位非常重视安全的决策者,那么你可以这么做

 

你可以选择指定的IP可以通过此规则,例如本次我们配置的vsftpd的虚拟机所在的IP!当然你也可以配置虚拟机所在的网段,由你自行决策!决策者

然后我们只需要确认下一步即可

默认下一步即可

好了,我们的配置结束了,如果你已经者却的配置了,那么来启动你的程序来看下你的成果吧!

PS:

了解原理很重要喔!  

vsftpd上传文件大小为0(主动模式)的更多相关文章

  1. asp.net限制了上传文件大小为..M,解决方法

    asp.net限制了上传文件大小为4M,在:在web.config里加下面一句,加在<System.web></System.web>之间如下:<system.web&g ...

  2. 【FTP】java FTPClient 文件上传内容为空,文件大小为0

    问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: ...

  3. Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取

    准备工作:需要使用coomos-net jar包.下载地址 一. 上传图片到FTP,文件大小为0的问题,解决:将ftp模式修改为Passive模式就可以了. //将ftp模式修改为Passive模式 ...

  4. java上传文件-大文件以二进制保存到数据库

    转自:https://blog.csdn.net/qq_29631069/article/details/70054201 1 一.创建表 oracle: create table baoxianda ...

  5. vsftpd上传文件出现553 Could not create file错误解决方法

    1.确定目录权限 2.关闭selinux

  6. ftp上传文件,上传的文件大小是0

    此问题是最近出现,代码和配置完全没改,试过所有的办法,两天了一直都解决不了,用完弃坑. 防火墙.被动模式主动模式,编码,服务端内存,日志,common-net.jar版本问题,服务端配置,nginx配 ...

  7. PHP上传文件参考配置大文件上传

    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...

  8. PHP上传文件超过了最大文件大小限制导致无法上传成功

    最近的研究<HeadFirst PHP & MySQL>第一本书5章"使用存储在文件中的数据",难道当一个文件上传应用程序,发生了错误.即,文件不能成功上传.这 ...

  9. $_FILES参数详解及简单<form>表单无刷新上传文件

    $_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...

随机推荐

  1. VScode 插件推荐与C/C++配置

    以下是我经常用到的VScode插件.由于插件本身具有详细的配置和介绍,不对插件本身的安装配置进行说明,仅仅支出这些插件的主要功能.具体使用强烈推荐看一下安装插件后的说明,大多数的问题和设置都可以找到, ...

  2. vue实现手机号码的校验(防抖函数的应用场景)

    上一篇博文我们讲到了节流函数的应用场景,我们知道了节流函数可以用在模糊查询.scroller.onresize等场景:今天这篇我们来讲防抖函数的应用场景:: 通过上一篇博文的学习,我们知道了防抖函数的 ...

  3. 持续集成高级篇之Jenkins资源调度

    系列目录 之前的示例我们主要关注点在于功能的实现,都是在一个节点的完成了.有了多个节点后,必须涉及到资源的调度问题.本节我们讲解在创建任务时与资源调度的有关选项以及一些平时没有注意到的但在生产环境需要 ...

  4. 【selenium】- selenium IDE的安装以及使用

    本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. 自动化测试工程师的任务 一个合格的自动化测试工程师,需要把框架搭建起来.让不是自动化测试的人,一个普通功能化测试的人,可以完成自动化测试 ...

  5. HDU 4479 Shortest path 带限制最短路

    题意:给定一个图,求从1到N的递增边权的最短路. 解法:类似于bellman-ford思想,将所有的边先按照权值排一个序,然后依次将边加入进去更新,每条边只更新一次,为了保证得到的路径是边权递增的,每 ...

  6. codeforces 872 D. Something with XOR Queries(思维)

    题目链接:http://codeforces.com/contest/872/problem/D 题意:给你一个排列p和对应的位置b也就是说p[b[i]]=i,然后给你最多询问2*n次找出所有的p排列 ...

  7. 4、cesium场景出图,打印图件

    cesium场景出图,打印图件 把3d渲染的页面进行截图,并可以下载到本地:代码如下: function printscreenScene() { var image = new Image();// ...

  8. 面向对象程序设计(Java) 第2周学习指导及要求

    面向对象程序设计(Java)第2周学习指导及要求 (2019.9.3-2019.9.9)   学习目标 适应老师教学方式,能按照自主学习要求完成本周理论知识学习: 掌握Java Application ...

  9. Linux运维基础提高之RAID卡和磁盘分区

    磁盘大小计算: 柱面的数量*每个柱面的大小(容量) [root@luffy001 ~]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 ...

  10. Python 70行代码实现简单算式计算器

    描述:用户输入一系列算式字符串,程序返回计算结果. 要求:不使用eval.exec函数. 实现思路:找到当前字符串优先级最高的表达式,在算术运算中,()优先级最高,则取出算式最底层的(),再进行加减乘 ...