您的位置:首页 > 编程语言 > Java开发

java 实现FTP下载文件。支持断点下载

2016-05-06 16:48 513 查看
使用java 实现一个简单的FTP文件下载案例。

maven 依赖

<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<version>2.13.2</version>
</dependency>

----------------------------------------------------------------------------------------

public void throwApkStream(HttpServletResponse response,

HttpServletRequest request, @RequestParam String apkName) {

String url = GetConfigProject.getProperty("APKURL");服务器地址
String username = GetConfigProject.getProperty("APKUID");FTP账号
String password = GetConfigProject.getProperty("APKPWD");FTP密码
String remotePath = GetConfigProject.getProperty("APKPATH");FTP文件夹路径
apkName = apkName + ".apk";

FTPClient ftp = new FTPClient();
try {
ftp.connect(url, 21);

ftp.setControlEncoding("GB2312");
FTPClientConfig conf = new FTPClientConfig("WINDOWS");
conf.setServerLanguageCode("zh");

ftp.login(username, password);

ftp.setFileType(2);
ftp.enterLocalPassiveMode();
int reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return;
}
ftp.changeWorkingDirectory(remotePath);

FTPFile[] fs = ftp.listFiles();
for (int i = 0; i < fs.length; i++) {
FTPFile ff = fs[i];

if (!ff.getName().equals(apkName))
continue;
String filename = apkName;

response.setHeader(
"Content-disposition",
"attachment;filename="
+ URLEncoder.encode(filename, "utf-8"));

InputStream is = ftp.retrieveFileStream(filename);

response.setHeader("Accept-Ranges", "bytes");

long p = 0L;
long l = 0L;
l = ff.getSize();

if (request.getHeader("Range") != null) {
response.setStatus(206);

p = Long.parseLong(request.getHeader("Range")
.replaceAll("bytes=", "").replaceAll("-", ""));
}

response.setHeader("Content-Length", new Long(l - p).toString());

if (p != 0L) {
response.setHeader("Content-Range",
"bytes " + new Long(p).toString() + "-"
+ new Long(l - 1L).toString() + "/"
+ new Long(l).toString());
}

response.setContentType("application/octet-stream");

response.setHeader("content-disposition",
"attachment;filename=" + apkName);
is.skip(p);

byte[] buffer = new byte[1024];

OutputStream os = response.getOutputStream();
int len;
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}

is.close();
os.flush();
os.close();
}

ftp.logout();

} catch (IOException e) {
e.printStackTrace();

if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException localIOException2) {
}
}
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException localIOException3) {
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ftp