FTPClient上传文件大小为0问题

FTP支持两种模式,一种方式叫做Standard主动方式,缺省时默认的方式,一种是 Passive 被动方式。?

下面介绍一个这两种方式的工作原理:

  • 主动模式:第一步FTP客户端首先随机选择一个大于1024的端口p1,并通过此端口发送请求连接到FTP服务器的21号端口建立TCP连接,在FTP中这个连接叫做控制连接,连接成功建立后,FTP客户端会发送port命令,紧接着FTP客户端会监视自己的p1+1端口,FTP服务器接收到port命令会从自己的20号端口向FTP客户端的p1+1端口发起请求建立TCP连接,这个连接叫做数据连接,用来发送数据,数据传输完毕后数据连接随即关闭,控制连接保持开启。
  • 被动模式:在建立控制连接的时候和主动模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个临时端口(也叫自由端口,端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,FTP客户端发送请求连接FTP服务器此端口,成功建立连接后FTP服务器将通过这个端口进行数据的传送数据传输完毕后数据连接随即关闭,控制连接保持开启。

因为很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网后的FTP客户端不支持主动模式,因为服务器无法穿过防火墙或者无法连接到NAT后的客户端。

至此,找到了原因:我是用的本机上开启了防火墙,FTP服务器请求本机的端口被隔离阻止。

  • 解决方案:将ftp模式修改为Passive模式。加上如下代码即可解决上传文件大小为0的问题
ftp.enterLocalPassiveMode();

原文地址:https://blog.51cto.com/14233687/2473771

时间: 2024-07-29 20:56:10

FTPClient上传文件大小为0问题的相关文章

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

问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: [参考:http://blog.csdn.net/tengdazhang770960436/article/details/43274001] 如果你在本地的 Java 项目里面去用 FtpClient 上传文件,然后虽然文件上传上去了,但是文件里面没有内容,那么这说明你的机器防火墙设置有问题如下图

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

准备工作:需要使用coomos-net jar包.下载地址 一. 上传图片到FTP,文件大小为0的问题,解决:将ftp模式修改为Passive模式就可以了. //将ftp模式修改为Passive模式 ftpClient.enterLocalPassiveMode(); 二.配置文件的操作,具体介绍请看Java中Properties类的用法总结 1.使用.properties配置文件的形式定义相关常量. 2.在工具类中导入配置文件 private static Properties getFtpC

文件上传控件-如何上传文件-大文件下载

需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是BJUI前端框架,并没有使用框架本身的文件上传控件,而使用的基于jQuery的Uploadify文件上传组件,在项目使用的jslib项目中找到了BJUI框架集成jQuery Uploadify的部分,这部分代码封装在bjui-all.js文件中, 在bjui-all.js文件中的全局变量定义中有以下

文件上传控件-如何上传文件-大文件断点续传

需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Windows,Mac,Linux 支持所有浏览器. 支持文件批量上传 支持文件夹上传,且要求在服务端保留层级结构.文件夹数量要求支持到10W. 支持大文件断点续传,要求刷新浏览器,重启浏览器,重启电脑后仍然能够继续上传.文件大小要求能够支持到20个G. 支持自动加载本地文件,要求能够自动加载指定的本地文件.

JSP-超大文件上传-如何上传文件-大文件上传

我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小限制,post没有) 2.表单的enctype属性:必须设置为multipart/form-data. 3.表单必须有文件上传项:file,且文件项需要给定name值 上传文件夹需要增加一个属性webkitdirectory,像这样: <input id="fileFolder" n

FtpClient上传文件异常:java.net.SocketException: Connection reset

这问题折磨我快一天了,下午这会儿终于解决了,问题不在程序错误,原因还是出在上传图片的客户端: 贴上异常代码块: 16:38:20.117 INFO  [email protected] - 成功登陆FTP服务器 16:38:20.123 ERROR [email protected] - Connection reset java.net.SocketException: Connection reset     at java.net.SocketInputStream.read(Socket

关于php上传文件

之前一直搞不明白到底php是怎么操作上传的 今天突然明白了 原来并不是php操作上传的,表单提交文件之后,文件就已经放到服务器的缓存区了 php需要做的就是在临时文件在本次回话结束时消失前.将它转存到一个地方 具体操作如下 <?phpheader("Content-type: text/html; charset=utf-8"); $time=time(); if ((($_FILES["file"]["type"] == "im

PHP上传文件时无法上传成功,$_FILES[&#39;screenshot&#39;][&#39;tmp_name&#39;]为空

最近在学习<HeadFirst PHP & MySQL>一书的第5章"使用存储在文件中的数据",做一个文件上传的应用时,出现了错误,就是文件无法成功上传.这个问题困扰了我很久,不过还好最后终于解决了.原因是我上传的图片文件大小超过了HTML 表单中 MAX_FILE_SIZE 选项指定的值32768Bytes即32KB导致无法上传成功. 我使用了XAMPP(Apache + MySQL + PHP + Perl)集成开发包和Zend Studio 10.6作为PHP

php上传文件返回信息

<form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000"> <input name="myFile" type="file"&