`
zhouzaibao
  • 浏览: 295451 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用apache commons 2.0 net组件开发ftp上传大文件使程序假死

阅读更多

     最近使用apache上面的commons 2.0开发ftp使用过程中,因为涉及到大文件的长时间传输,在最后经常导致程序死掉,不知道大家有没有办法解决。

    其中传文件的代码如下:

/**
 * 上传文件到服务器,新上传和断点续传
 * @param remoteFile 远程文件名,在上传之前已经将服务器工作目录做了改变
 * @param localFile 本地文件File句柄,绝对路径
 * @param processStep 需要显示的处理进度步进值
 * @param ftpClient FTPClient引用
 * @return
 * @throws IOException
 */
public boolean uploadFile(String remoteFile,File localFile,FTPClient ftpClient,long remoteSize) throws IOException{
	boolean status;
	//显示进度的上传
	long step = localFile.length() / 100;
	long process = 0;
	long localreadbytes = 0L;
	RandomAccessFile raf = new RandomAccessFile(localFile,"r");
	OutputStream out = ftpClient.appendFileStream(new String(remoteFile.getBytes("GBK"),"iso-8859-1"));
	//断点续传设置起始位置
	if(remoteSize>0){
		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;
//			System.out.println("上传进度:" + process);
			//TODO 添加汇报上传状态内容
		}
	}
	logger.info("清空输出流");
	out.flush();
	logger.info("关闭文件读句柄");
	raf.close();
	logger.info("关闭输出流");
	out.close();
	logger.info("关闭输出流成功");
	boolean status = ftpClient.completePendingCommand();
	logger.info("从上传方法返回");
	return status;
}

如果上传大的文件,比如说是500M文件,ftp传输大概需要两个小时左右的时候,ftpClient.completePendingCommand()方法就会死掉,我在网上也查了一些内容,说是打开的流必须关闭后ftp Server才会返回正确的状态吗。问题是我关闭了同样没有收到正确的状态码。

    如果换成appendFile(String remoteFile,InputStream in)这种方法就不会存在问题,

    因为项目需要汇报进度,所以必须使用流的方式读取,希望知道解决方案的兄弟帮忙,多谢!
分享到:
评论
2 楼 zhouzaibao 2009-07-02  
请你看这个系列,不要只看一个
1 楼 duyunfengsolo 2009-06-23  
楼主请问你会上传整个目录吗?包括里面的文件和子目录. 麻烦加我QQ:329139017

相关推荐

    commons-net-ftp-2.0.jar.zip

    《Apache Commons Net FTP库在Java开发中的应用》 Apache Commons Net是一个Java库,它提供了对各种网络协议的支持,其中就包括FTP(File Transfer Protocol)协议。在这个特定的案例中,我们关注的是`commons-...

    使用Apache commons-net.jar开发FTP工具类

    在本文中,我们将深入探讨如何利用这个库开发一个FTP工具类,以便在Java应用程序中进行文件上传、下载和其他FTP操作。 首先,我们需要了解FTP的基本概念。FTP是一种用于在网络上进行文件传输的标准协议。它允许用户...

    用org.apache.commons.net.ftp.FTPClient包实现简单文件下载

    在本文中,我们将深入探讨如何使用`org.apache.commons.net.ftp.FTPClient`包来实现简单的文件下载功能。这个过程涉及到几个关键步骤,包括连接到FTP服务器、登录、设置传输模式、下载文件以及断开连接。 首先,你...

    基于apache commons.fileupload的文件上传组件,改进了上传速度

    apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...

    apache-commons所有jar包

    在Web开发中,Apache Commons 的组件被广泛使用,尤其是在 JSP+Servlet 的学习,以及基于 Spring(SSM)、Struts(SSH)等框架的应用开发中。 Apache Commons 中包含多个模块,每个模块都专注于特定的功能领域,...

    apache-commons源码及jar文件

    Apache Commons是一个非常有用的工具包,解决各种实际的通用问题。(附件中提供了该工具包的jar包,及源文件以供研究) BeanUtils Commons-BeanUtils 提供对 Java 反射和自省API的包装 Betwixt Betwixt提供将 ...

    org.apache.commons.net.ftp.FTP**完整jar包

    .net.ftp.FTPClient jar ,exaple, commons-net-2.0.jar

    commons-net-ftp-2.0.rar

    Apache Commons Net库是Java开发人员在处理网络协议时的一个强大工具,特别是对于FTP(文件传输协议)客户端编程。这个库,如"commons-net-ftp-2.0.rar"所示,包含了一系列的JAR文件,使得开发者能够轻松地构建FTP...

    apache commons scxml2.0

    apache commons scxml 2.0 只有这里才有哦,官网上面只有0.9版本,需要自己下载源码编译,这里我已经编译好了,连同依赖的jar包都在这里了。想知道怎么使用SCXML,可以参考我的博客:...

    apache commons-net-3.5

    版本3.5是这个库的一个稳定发行版,提供了丰富的功能和优化,使得开发者可以轻松地在Java应用程序中实现在FTP服务器上进行文件的上传、下载以及其他操作。 Apache Commons Net库包括了以下关键知识点: 1. **FTP...

    Apache Commons NET 3.0

    1. FTP支持:Apache Commons Net 3.0提供了全面的FTP客户端实现,允许开发者进行文件上传、下载、目录浏览、文件重命名等操作。它支持FTP和FTPS(FTP over SSL/TLS)协议,确保数据传输的安全性。FTPClient类是主要...

    基于apache commons.fileupload的文件上传组件

    在创建一个基于Apache Commons FileUpload的文件上传组件时,通常会包含以下步骤: 1. 创建`DiskFileItemFactory`实例。 2. 使用工厂创建`ServletFileUpload`实例,设置大小限制。 3. 解析`HttpServletRequest`对象...

    最新org.apache.commons.net..包完整、干净、实用

    FTP是一种用于在网络上进行文件传输的协议,Apache Commons Net库中的FTP组件提供了丰富的API,使得开发者可以轻松地在Java应用程序中实现FTP文件的上传、下载、目录浏览、权限设置等功能。FTP客户端可以使用这些API...

    commons-net-2.0 FTP上传下载删除保存下

    commons-net-2.0 FTP上传下载删除保存下

    文件上传组件_Apache_Commons_FileUpload_应用指南.pdf

    本文档主要介绍了 Apache Commons FileUpload 组件的应用指南,旨在帮助开发者快速了解和使用该组件实现文件上传功能。 一、为什么需要文件上传组件? 几乎每一个 Web 应用中都需要为用户提供文件上传的功能,例如...

    Apache Commons组件简介.ppt

    Apache Commons 是一个由Apache软件基金会开发的Java库项目,它专注于提供可重用的Java组件。这个项目包含多个子组件,每个子组件都有其特定的功能和用途,旨在简化开发过程并增强Java应用程序的功能。 1. **...

    apache.commons全套jar包下载

    4. Apache Commons Net: 这是网络编程相关的组件集合,包含FTP、SMTP、Telnet等协议的支持,以及DNS查询等功能。例如,FTPClient可以方便地进行FTP文件上传和下载,而SMTPClient则可以帮助实现邮件发送。 5. Apache...

    org.apache.commons.net.ftp

    Apache Commons Net库是Java开发人员在处理网络协议时的一个强大工具,特别是对于FTP(文件传输协议)操作。标题"org.apache.commons.net.ftp"表明这个压缩包包含了与Apache Commons Net库中FTP相关的类和功能。描述...

Global site tag (gtag.js) - Google Analytics