java FTP上传文件,成功上传,但是文件为空????

我再linux上面装了一个ftp,准备用程序上传文件到ftp 文件服务器上面,
上传是成功了,但是上传后的文件为空??我调试了发现storeFile这个方法一直返回false

图片说明

但不知道怎么回事,求指教。。。

 /** 
     * Description: 向FTP服务器上传文件 
     * @param host FTP服务器hostname 
     * @param port FTP服务器端口 
     * @param username FTP登录账号 
     * @param password FTP登录密码 
     * @param basePath FTP服务器基础目录
     * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+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) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            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;
            }
            //切换到上传目录
            if (!ftp.changeWorkingDirectory(basePath+filePath)) {
                //如果目录不存在创建目录
                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);
            //上传文件
            if (!ftp.storeFile(new String(filename.getBytes("GBK"),"iso-8859-1"), input)) {
                return result;
            }
            input.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) throws IOException {
         File file2=new File("D:\\Workspaces\\training\\web\\src\\main\\webapp\\modile\\Mission evaluation.docx");
         FileInputStream input=new FileInputStream(file2);

         uploadFile("137.200.48.72", 21, "root", "123", "/home/files", "/Test/poc", "test.doc", input);
         input.close();
         System.out.println(1);
    }
0

4个回答

ftp.enterLocalPassiveMode()试一下开启pasv模式

1
apbbbbb
旋转的钢笔 非常感谢
一年多之前 回复

断电调试下 input 输入流 有没有数据 或者是前面解码格式不对 换成utf-8试试

2
zy841958835
pluie-cloudy 回复旋转的钢笔: 厉害了
一年多之前 回复
apbbbbb
旋转的钢笔 试了utf-8也不行,流里面是有数据的
一年多之前 回复

有没有数据 或者是前面解码格式不对 换成utf-8试试

0
apbbbbb
旋转的钢笔 谢谢,是由于linux的安全限制导致的,需要设置下。。 官方API enterLocalPassiveMode解释 将当前数据连接模式设置为PASSIVE_LOCAL_DATA_CONNECTION_MODE。 使用此方法仅用于客户端和服务器之间的数据传输。 这种方法会导致在每个数据连接打开之前向服务器发出一个PASV(或EPSV)命令,告诉服务器打开客户端连接的数据端口进行数据传输。 FTPClient将保持在PASSIVE_LOCAL_DATA_CONNECTION_MODE中,直到通过调用其他方法(如enterLocalActiveMode())更改模式 注: 目前调用任何连接方法都会将模式重置为ACTIVE_LOCAL_DATA_CONNECTION_MODE。
一年多之前 回复

查找了资料,询问了好友,感谢,终于解决了,加上这一句话就好了 ftp.enterLocalPassiveMode();

参考这篇文章http://www.bubuko.com/infodetail-985948.html

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java ftp上传文件内容为空
文件上传成功 但是内容为空 需要加上 ftpClient.enterLocalPassiveMode(); 代码如下: package com.zhuoshi.jcbigdata.spark.jinjingzheng; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti...
java FTPClient 文件上传内容为空
如果你在本地的 java 项目里面去用 FtpClient 上传文件,然后虽然文件上传上去了,但是文件里面没有内容,那么这说明你的机器防火墙设置有问题如下图  为了可以正常测试,你需要把下面红线圈起来的钩取消掉,然后点击确定就行了。
解决FTPClient上传文件为空
JAVA使用FTPClient上传文件时总是为空,而使用FileZilla客户端时却不会。 后来查了下资料,FTP服务器有被动模式和主动模式。(具体查另外资料) 在JAVA中将FTPClient设置为被动模式即可解决问题。 public void testFTPClient() throws Exception { try { //創建一個FTPClient對象 FTPClie
Python: 关于ftp上传文件,文件内容为空的问题
        前几天用python写了个ftp上传文件,自己写文件,再上传至ftp指定目录,结果上传文件总是为空,一直以为是上传步骤错了,最后发现是写文件错了。。   ftp上传文件用的是: fp = open(filename, 'rb') ftp.storbinary('STOR %s' % os.path.basename(filename), fp, 1024)   而写文件用...
ftp 上传文件内容为空
1、ftp上传文件之后,原本应该有内容,但是是空的文件夹。后查到的原因,是因为ftp server可能每次开启不同端口传输数据。但在linux上传,由于安全限制,可能没有开启某些端口,出现阻塞情况。 2、解决方案 在ftp上传方法中添加 ftp.enterLocalPassiveMode();设置ftp为被动模式,用来解决上传文件为空。 解决l...
解决使用FTPClient对象或FtpUtil工具类上传文件为空(搭建Nginx图片服务器[第四课])
一、使用FTPClient上传文件为空 JAVA使用FTPClient上传文件时总是为空,有些资料说防火墙设置问题,但是本机防火墙已设置过。 后来查了下资料,FTP服务器有被动模式和主动模式。 在JAVA中将FTPClient设置为被动模式即可解决问题。 **FTPTest.java** package com.taotao.controller; import java....
关于java上传到ftp文件为空的处理笔记
这几天用java上传图片到ftp,上传成功,有文件夹,有名字,就是文件大小为0,内容空,翻遍了网上大佬们的解决办法,终于搞定了。 需要在ftpClient.setFileType(FTP.BINARY_FILE_TYPE);  前面添加FTPClient.enterLocalPassiveMode(); 一开始我还以为是防火墙或者字符的问题,结果不是,希望能帮到大家,
关于使用java通过 FTP 上传文件,总结
1、需要引入包 commons-net-ftp-2.0.jar 2、部分代码如下: [code="FtpFile上传/下载"] import org.apache.commons.io.IOUtils; import org.apache.commons.net.ftp.FTPClient; import sun.net.ftp.FtpClient; import sun....
java 连接FTP 连接之后无法上传文件,又不报错
java 连接FTP 后,调用FTPClient.storeFile()方法时,就停止在那里,什么反应都没有,也不抛出异常,出现假死状态。 原因:ftp server可能每次开启不同的端口来传输数据,但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞 解决方法: 在FTPClient.storeFile()方法前调用FTPClient.enterLoca...
FTP上传文件0字节问题
ftp上传的时候出现文件0字节怎么处理
FTPClient上传文件成功返回值是false问题
在使用org.apache.commons.net.ftp.FTPClient这个包上传文件到服务器时返回值总是false,例子如下        //创建一个FtpClient对象 FTPClient ftpClient = new FTPClient(); //创建ftp连接,默认端口是21,可以不写 ftpClient.connect("192.168.140.128",21); /...
java上传文件到服务器上传成功,但是文件却找不到
今天遇到了这么一个问题,就是上传报上传成功了,但是查找却发现文件没有在该文件夹下,解决思路如下:    1、使用linux指令在更目录下查询是否有上传的文件       find  -name  文件名称  有------》查看路径是否正确,docker的话会出现这种问题  没有的话------------》查看该文件是否有写入如权限       ll     没有---------》则设置写入权...
FTPClient上传文件大小为0
问题原因一、FTP文件目录空间达到上限 二、网络策略变更造成,被防火墙拦截解决方案FTP协议有两种工作方式:PORT方式和PASV方式,默认为PORT方式,修改为PASV方式,目前问题解决。需要进一步观察,是否还有问题
JAVA FTP上只能创建文件夹,无法上传文件
同一份代码,有的机器只能在FTP服务器上创建文件夹,无法上传文件,排查下来,是因为防火墙的问题!
FTP上传文件大小为0的问题
需要设置文件上传的方式,即调用ftpclient的方法setfiletype(),并传入参数FTP.BINARY_FILE_TYPE,如下是FTPClient的API中关于这个方法中参数的说明原文:Sets the file type to be transferred. This should be one of FTP.ASCII_FILE_TYPE , FTP.BINARY_FILE_...
FTP上传、不报错、但文件上传不上去
FTP上传、不报错、但文件上传不上去、这个很坑,百度了半天也不知道为什么,因为不抛出异常呀 解决办法,是需要设置标红的代码 //设置为被动模式 public static void uploadFtpFile(String hostname,String username,              String password,String uploadFilePath,String f...
解决ftp上传,本地测试可以,部署到服务器不可以问题
感谢原创的分享,完美解决我的问题!!!!!!!!!!!! Q:用FTPClient,执行到ftp.storeFile(fileName, inputFile);返回false,在本地测试时可以上传文件,部署到服务器上传文件总是返回false; A:  加上ftpclient.enterLocalPassiveMode(); ftp.storeFile(fileName, inputFile)...
java使用ftp上传文件出现false()
http://blog.csdn.net/beyondlpf/article/details/9343781这是我解决的的原文地址解析原因 在项目中使用commons-net.jar实现FTP文件的下载,在windows xp上运行正常,但是放到linux上,却出现问题,程序运行到 FTPClient.listFiles()或者FTPClient.retrieveFile(
解决文件上传的同时,读取文件为空的思路
情景:     我们是ftp上传文件的同时,服务器端轮询该文件,但是一直报空指针。猜测是文件被占用的时候,读不到数据,然后就在网上找java怎么判断文件被占用的方法。网上大多都是renameto(),试了试,解决不了问题,不知道是咋回事,然后找了个通用的方法,可以解决问题。 思路: (1)先去读文件大小(用到的方法file.length()) (2)线程休眠几秒钟(用到的方法Thread.
解决FTP client 上传文件失败
FTP client 上传文件失败
ftp文件上传后的大小为0K
ftp上传到服务器分主动模式和被动模式, 外网ip上传主动模式:ftp.enterLocalActiveMode();(默认) 内网ip上传被动模式:ftp.enterLocalPassiveMode(); 否则就会出现如题的问题。
解决使用FTPClient对象或FtpUtil工具类上传文件为空(搭建Nginx图片服务器
一、使用FTPClient上传文件为空 JAVA使用FTPClient上传文件时总是为空,有些资料说防火墙设置问题,但是本机防火墙已设置过。  后来查了下资料,FTP服务器有被动模式和主动模式。  在JAVA中将FTPClient设置为被动模式即可解决问题。  **FTPTest.java** package com.taotao.controller; import java.io....
java上传图片到FTP,文件大小为0
折腾了好久,告诉大家! 关掉你的防火墙!!!
Java后台上传txt文件到ftp中,数据内容丢失
  ftpClient.enterLocalPassiveMode(); 在本地上传一切都好,可是发布到线上的时候 上传到ftp中,文件没有内容,在上传的方法中加上这句话就ok
关于java使用Ftpclient上传到FTP服务器文件损坏的问题解决
作为职场菜鸟和java初学者,前几天被一个问题困扰,想到也许有如我一般的新手也会遇到同样的问题,所以决定先写下来,不行当个笔记存着也是不错的嘛。 言归正传,之前使用Ftpclient上传文件时,TXT可以正常打开,但是其他诸如word和excel文件上传之后无法打开,后来上网一查,都说要在连接ftp服务器之后设置文件传输模式,http://blog.csdn.net/ybygjy/article
使用FileZilla连接Linux服务器正常连接,但是无法上传图片[FTP文件上传]
使用FileZilla进行连接服务器,不能上传图片的解决方式:     1.将要上传到服务器上的文件夹的权限改为777,如chmod -R 777 /var/images     2.打开vsftp.config(在home内)【vim /etc/vsftpd/vsftpd.conf】文件进行指定local_root=**(个人设置的路径如/var/images)     3.server
使用Ftpclient上传文件时,只能创建文件不能给文件写内容,由于FTP主动模式和被动模式
下面贴主要代码try {        FTPClient ftpClient=new FTPClient ();        //默认端口号:8080        int reply;        ftpClient.connect("172.23.132.000");        ftpClient.login("user", "test");        reply =ftpCli...
如何判断ftp上传文件完毕
问题描述:ftp上传文件的时候总是先创建了文件,然后再上传。如果此时程序读取文件可能就读取一部分不完成的数据。那么怎么解决才合理呢 方案1.上传文件的客户端先创建一个临时文件名称,然后上传完毕再重命名。而重命名是修改注册表所以不会产生过程中数据不一致的问题 方案2.在ftp客户端上传文件不由我们控制的时候,不能实施第一方案怎么办呢。打开文件在文件尾追加一个标识内容,关闭打开文件
使用bat上传FTP文件
演示使用bat来上传FTP文件,并判断是否上传成功
用主动模式port上传文件后发现文件大小为0
用主动模式port上传文件发现有个问题,我发现有时候上传文件后,存放在服务器上文件大小为0【解决方法】方法1:高级安全windows防火墙 -> windows 防火墙属性 - 公用配置文件- 防火墙状态- 关闭方法2:高级安全windows防火墙 -> windows 防火墙属性 - 公用配置文件- 防火墙状态- 启用推荐1)入站连接:设置为允许2)出战连接:允许默认值...
判断大文件创建成功问题(如ftp上传后,判断上传成功)
关于大文件上传成功判断,这里举两个适用案例: 1、页面上传文件至服务器后,需要立即对文件进行处理,如解压、读取等操作; 2、通过ftp上传大文件后,立即对大文件进行备份,解压,读取数据等等; 3、.... 这时,如果不判断文件上传成功,可能复制过去的只是文件的一部分,或者是解压不成功。 有人说通过Thread.sleep(10000),在操作文件前进行睡眠10s,这个并不是很好,睡的时间
FTP服务器:解决无法上传文件到FTP服务器的问题(二)
问题:在上传过程中,出现“打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"错误。 解决方法:打开控制面板-》网络和Internet 点击 Internet选项 Internet属性>>高级>>将“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”选项去掉>>确定即可 ...
linux中ftp连接成功但是无法上传和删除
linux中安装ftp 补充:检查centos是否安装vsftpd   [root@localhost zhangzhuo]# rpm -aq vsftpd   vsftpd-3.0.2-22.el7.x86_64  #查询的返回结果,表明已安装   若要卸载Vfstpd:     [root@localhost zhangzhuo]# rpm -e vsft
ftp上传图片为空,不为空打开没法查看
@Test public void testFtpClient() throws SocketException, IOException { //创建FtpClient对象 FTPClient ftpClient = new FTPClient(); //创建连接 ftpClient.connect("192.168.0.105", 21); //登录ftp ftpClien
ftp上传文件失败,大小始终为0
主机:win7 虚拟机:ubuntu14.04 ubuntu中安装vsftpd,配置writing_enable=yes以及其它配置。上传文件大小始终为0。原因:磁盘空间被占满,没有空间写入: df -lh 查看磁盘空间。 解决:删除部分不用文件或日志文件,释放空间。
使用vsftpd搭建ftp,用户无法上传文件
553 Could not create file.在centOS7上使用vsftpd搭建ftp服务器,参考了这篇博客:http://blog.csdn.net/the_victory/article/details/52192085搭建完成之后,可以正常的进行用户登录和上传文件等操作,却不可以上传文件,一直提示553的错误。网上很多人说是防火墙导致的,然而在尝试了他们的解决方法之后,依然存在这个问
使用java对ftp进行文件的上传下载demo
本文引用了https://www.cnblogs.com/lr393993507/p/5502266.html资源,并做了一些优化所需jar:ftp model类,负责ftp连接属性的设置, 提供set get 方法:package com.ftp.model;public class Ftp {private String ipAddr;//ip地址        private Integer...
linux架设ftp,root用户登陆后看不到主目录,但可以上传文件,上传的文件路径?
巨坑,千辛万苦架设好ftp,千辛万苦用root登陆上去,这次也没报错账号密码不对,但就是看不到pub主目录,关了SELinux也还是不行。。。又创建一个新用户,设好权限,还是看不到,能上传文件,但不知道文件在linux端去哪找。。。。。 最终,我用8uftp链接到linux的ftp,发现,我上传的文件在   /root  下,没错,在根目录的root下。。。。 输入指令  ls  -l  /r...
关于使用FTPClient创建文件夹并上传文件遇到的问题
       需求:使用FTPClient,根据上传文件和需要存放的文件目录,若FTP服务端不存在指定的文件目录,则创建;否则直接将文件保存至对应的文件目录中。        测试:感觉问题不大,直接写代码,做测试用例。用JAVA第三方的FTPClient作为工具,主要代码如下: public boolean FtpUpload(String fileName, String file, ...
Java上传文件到FTP服务器
前言: 日常工作中有时需要涉及到图片和文件相关的功能,有些是转换为byte数组的形式存在数据数据表中,而更多的是将这些文件上传至FTP服务器等。本文简单介绍如何在windows下搭建FTP服务器以及利用FTPClient上传图片等功能的实现简单代码。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 ftp学习 java ftp java 学习