我项目中是这样写的用了多年了,支持断点继续传,供你参考:/**
 * 上传文件到服务器,新上传和断点续传
 * 
 * @param remotePath
 *            远程文件名,在上传之前已经将服务器工作目录做了改变
 * @param localPath
 *            本地文件File句柄,绝对路径
 * @param processStep
 *            需要显示的处理进度步进值
 * @param ftpClient
 *            FTPClient引用
 * @return
 * @throws IOException
 */
private boolean uploadFile(String remotePath, File localPath,
FTPClient ftpClient, long remoteSize) throws IOException {
// 显示进度的上传
long step = localPath.length() / 100;
long process = 0;
long localreadbytes = 0L;
RandomAccessFile raf = new RandomAccessFile(localPath, "r");
OutputStream out = ftpClient.appendFileStream(remotePath);
//防止除0错误
if(step==0)
step = 1;
// 断点续传
if (remoteSize > 0) {
System.out.println("文件存在,可进行断点续传.");
ftpClient.setRestartOffset(remoteSize);
process = remoteSize / step;
raf.seek(remoteSize);
localreadbytes = remoteSize;
}
byte[] bytes = new byte[1024];
int c;
while ((c = raf.read(bytes)) != -1) {
out.write(bytes, 0, c);
localreadbytes += c;
if (localreadbytes / step != process) {
process = localreadbytes / step;
if (process > 0 && process % 10 == 0) {
if (process == 100) {
System.out.println(process + "%");
System.out.println(" 上传进度:" + process + "%");
} else
System.out.print(process + "%");
} else {
System.out.print(".");
}
}
}
out.flush();
raf.close();
out.close();
boolean result = ftpClient.completePendingCommand();
if (result) {
logger.info("上传文件完成");
return true;
} else {
logger.error("上传文件失败");
return false;
}
}
我没看到你写流的代码啊,老大.

解决方案 »

  1.   


    额,流的代码我倒是没贴过来,是因为不会是那部分的原因。因为在其他地方,FTP是正常的,包括在这个用户那里,我自己如果挂一个FTP的话,也没有问题而且我们不需要断点续传,都是很小的文件问题是现在FTP推送以后,就只有一个空文件在那里,内容为空。推送到其他的FTP地址,文件正常所以估计是该FTP服务器的设置,和这段代码实现之间,有些不兼容。但是我不知道问题在哪儿,所以拿出来问问。
      

  2.   


    接吧接吧,刚查出来了和程序没关系,客户端电脑的windows防火墙阻挡了。所以才搞成FTP过去以后只有一个空文件,没有文件内容的情况。。可怜的我啊
      

  3.   

    FTP 由于防火墙的原因...确实经常发生...
      

  4.   


    可怜我第一次碰到这种情况,同事和客户都说可能是FTP的主动模式和被动模式的原因。我查了好久。还下载了好多FTP服务器结果导致我的电脑都中毒了。。最后才查出是防火墙的原因。
      

  5.   

    我的客户端 防火墙关了 一样是空的? 是不是ftp服务器也要设置防火墙?