在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传;或者想做类似迅雷下载类似的功能,文件太大,今天传一半,睡一觉去先,明天继续传。

Java上传FTP文件,用的比较多的工具是apache的commons-net。如果想用commons-net实现FTP上传的断点续传还是有点麻烦。

除了commons-net之外,还有很多非常优秀的FTP工具,这里使用edtftpj这个工具来实现断点续传。

下载:http://www.enterprisedt.com/

这里下载免费版,相对收费的版本少一些功能,但是足够使用了。

下载完成,解压后,在lib文件夹下,可以看到edtftpj.jar文件。放到项目中去。

下面是FTP断点续传上传文件的代码:

import java.io.File;
import java.io.IOException; import com.enterprisedt.net.ftp.FTPException;
import com.enterprisedt.net.ftp.FTPTransferType;
import com.enterprisedt.net.ftp.FileTransferClient;
import com.enterprisedt.net.ftp.WriteMode; public class FtpTool
{
/**
* edtptpj的上传工具
*/
private FileTransferClient ftp; /**
* FTP IP
*/
private String ip; /**
* FTP端口号
*/
private int port; /**
* FTP用户名
*/
private String username; /**
* FTP密码
*/
private String password; /**
*
* 构造方法,初始化FTP IP、FTP端口、FTP用户名、FTP密码
*
* @param ip
* FTP IP
* @param port
* FTP端口
* @param username
* FTP用户名
* @param password
* FTP密码
*/
public FtpTool(String ip, int port, String username, String password)
{
this.ip = ip;
this.port = port;
this.username = username;
this.password = password;
} /**
*
* 连接FTP
*
* @throws FTPException
* FTPException
* @throws IOException
* IOException
* @author XXG
*/
public void connect() throws FTPException, IOException
{
ftp = new FileTransferClient();
ftp.setRemoteHost(ip);
ftp.setRemotePort(port);
ftp.setUserName(username);
ftp.setPassword(password); //设置二进制方式上传
ftp.setContentType(FTPTransferType.BINARY);
ftp.connect();
} /**
*
* 上传本地文件到FTP服务器上,文件名与原文件名相同
*
* @param localFile
* 本地文件路径
* @param remoteFilePath
* 上传到FTP服务器所在目录(该目录必须已经存在)
* @throws IOException
* IOException
* @throws FTPException
* FTPException
* @author XXG
*
*/
public void resumeUpload(String localFile, String remoteFilePath)
throws FTPException, IOException
{
File local = new File(localFile); //FTP文件完整路径
String remoteFileFullPath = remoteFilePath + local.getName(); //上传:WriteMode.RESUME表示断点续传
ftp.uploadFile(localFile, remoteFileFullPath, WriteMode.RESUME);
} /**
*
* 关闭FTP连接
*
* @throws IOException
* IOException
* @throws FTPException
* FTPException
* @author XXG
*/
public void close() throws FTPException, IOException
{
ftp.disconnect();
}
}

下面是main方法测试断点续传功能(测试的时候可以在上传的中途关闭程序,再开始上传,看是否在续传):

public static void main(String[] args)
{
FtpTool ftpTool = new FtpTool("192.168.7.49", 21, "editor", "tvm_editor");
try
{
ftpTool.connect();
try
{
System.out.println("开始上传文件...");
ftpTool.resumeUpload("E:\\软件\\eclipse-jee-indigo-SR2-win32.zip", "wucao/aa/");
System.out.println("完成上传文件。");
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
ftpTool.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

在上面的代码中,ftp.uploadFile(localFile,remoteFileFullPath, WriteMode.RESUME) 这句代码中的第三个参数WriteMode.RESUME即表示断点续传。

除了WriteMode.RESUME方式上传,还有其他两种方式:

WriteMode.OVERWRITE:覆盖上传,就是上次如果没传完,这次删掉上次的重新传。

WriteMode.APPEND:续写,就是如果FTP服务器上存在同名的文件,就接着它后面续加。

注意续写和断点续传区分:比如有个100M的文件上传,上次传了80M,那么用RESUME方式的话,传完剩下的20M就完成了,但对于APPEND,它会接在80M后面重新传,最后成功的时候FTP上的文件大小是180M。

最后要注意的是:并不是所有FTP服务器都支持断点续传,有断点续传的服务器也可以关闭断点续传的功能,不支持断点续传的服务器使用RESUME会抛出异常。所以,在使用FTP断点续传之前,首先要确认一下FTP服务器本身是否支持断点续传。

本文转自:http://blog.csdn.net/kazeik/article/details/8260067

edtftpj让Java上传FTP文件支持断点续传的更多相关文章

  1. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  2. java+上传整个文件夹的所有文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...

  3. java上传超大文件解决方案

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysq ...

  4. java上传大文件解决方案

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在10G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以10G来进行限制. 第一步: 前端修改 由于项目使用的是BJ ...

  5. java上传视频文件

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  6. java 上传大文件以及文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  7. java上传大文件(局域网环境)

    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...

  8. C# FTP上传下载(支持断点续传)

    <pre class="csharp" name="code"><pre class="csharp" name=&quo ...

  9. java上传1t文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用.此控件PC全平台支持包括mac,linux系统的文件上传,文章末尾将附上控件下载与教程链接 ...

随机推荐

  1. Couchbase 介绍 - 更好的 Cache 系统

    在移动互联网时代,我们面对的是更多的客户端,更低的请求延迟,这当然需要对数据做大量的 Cache 以提高读写速度. 术语 节点:指集群里的一台服务器. 现有 Cache 系统的特点 目前业界使用得最多 ...

  2. Segment Tree Build I & II

    Segment Tree Build I The structure of Segment Tree is a binary tree which each node has two attribut ...

  3. Maven简介

    转载地址:http://www.cnblogs.com/itech/archive/2011/11/01/2231837.html Ant是软件构建工具,Maven的定位是软件项目管理和理解工具.Ma ...

  4. 线段覆盖4(codevs 3012)

    题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...

  5. 一箭双雕打开Genesis

    打开记事本,将如下内容填入,保存时将后缀名改为bat @ ECHO 正在清理垃圾文件...del C:\tmp\*.* /f /q@ ECHO 清理完毕@ ECHO OFF@ ECHO.@ ECHO. ...

  6. Myeclipse中把java代码导成UML类图

    Myeclipse中把java代码导成UML类图 1.右键点击项目名称,选择New-------àUML2 Model 2.给类图命名 3.导成类图 1)如果要把整个项目导成类图,则把整个项目拖到类图 ...

  7. 一、HTML和CSS基础--HTML+CSS基础课程--第5部分

    第九章 CSS盒模型 元素分类
: 在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的 ...

  8. js伪数组及转换

    什么是伪数组 能通过Array.prototype.slice转换为真正的数组的带有length属性的对象. 这种对象有很多,比较特别的是arguments对象,还有像调用getElementsByT ...

  9. SURF算法与源码分析、下

    上一篇文章 SURF算法与源码分析.上 中主要分析的是SURF特征点定位的算法原理与相关OpenCV中的源码分析,这篇文章接着上篇文章对已经定位到的SURF特征点进行特征描述.这一步至关重要,这是SU ...

  10. WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping

    我百度到的答案,原文请点击 错误信息: WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping.请添加一个名为 jquer ...