文档章节

Java实现ftp文件上传 、下载

DavidBao
 DavidBao
发布于 2014/12/15 21:37
字数 654
阅读 132
收藏 2

使用spring mvc +commons-net-1.4.1.jar 上传文件到ftp,在此之中最好设置为字节传输,否则文件大小会发生变化,图片不是被破坏就是现实不正常。

package com.my.springmvc.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

public class FtpTransfer {
 private static Logger logger = Logger.getLogger(FtpTransfer.class);

 /**
  *
  * @param url
  *            FTP服务器hostname
  * @param port
  *            FTP服务器端口
  * @param username
  *            FTP登录账号
  * @param password
  *            FTP登录密码
  * @param path
  *            FTP服务器保存目录
  * @param filename
  *            上传到FTP服务器上的文件名
  * @param input
  *            输入流
  * @return 成功返回true,否则返回false
  */
 public static boolean uploadFile(String url, int port, String username,
   String password, String path, String filename, InputStream input)
   throws Exception {
  boolean success = false;
  FTPClient ftp = new FTPClient();
  
ftp.connect(url, port);// 连接FTP服务器
  int reply;
  // 如果采用默认端口,可以使用
ftp.connect(url)的方式直接连接FTP服务器
  
ftp.login(username, password);// 登录
  // 设置PassiveMode传输
  
ftp.enterLocalPassiveMode();
  // 设置以二进制流的方式传输
  
ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
  
ftp.setFileType(FTP.BINARY_FILE_TYPE);
  reply =
ftp.getReplyCode();
  if (!FTPReply.isPositiveCompletion(reply)) {
   
ftp.disconnect();
   logger.error("----------->>>连接ftp服务器失败");
   throw new Exception("----------->>>连接ftp服务器失败");
  }
  logger.info("-----连接ftp服务器成功");
  boolean isChangeWork =
ftp.changeWorkingDirectory(path);
  if (!isChangeWork) {
   boolean isMade =
ftp.makeDirectory(path);
   if (!isMade) {
    throw new IOException("ftp 上传文件穿件目录失败");
   }
   isChangeWork =
ftp.changeWorkingDirectory(path);
  }
  
ftp.storeFile(filename, input);
  
ftp.logout();
  success = true;
  logger.info("----------->>>文件上传成功");
  if (
ftp.isConnected()) {
   try {
    
ftp.disconnect();
   } catch (IOException ioe) {
    logger.error("----------->>>ftp连接关闭失败 " + ioe.getMessage());
   }
  }
  return success;
 }

 /**
  *
  * @param url
  *            FTP服务器hostname
  * @param port
  *            FTP服务器端口
  * @param username
  *            FTP登录账号
  * @param password
  *            FTP登录密码
  * @param path
  *            FTP服务器保存目录
  * @param filename
  *            FTP服务器下载上的文件名
  * @param input
  *            输入流
  * @return 成功返回true,否则返回false
  */
 public static boolean downloadFile(String url, int port, String username,
   String password, String path, String filename, OutputStream out)
   throws Exception {
  boolean success = false;
  FTPClient ftp = new FTPClient();
  
ftp.connect(url, port);// 连接FTP服务器
  int reply;
  // 如果采用默认端口,可以使用
ftp.connect(url)的方式直接连接FTP服务器
  
ftp.login(username, password);// 登录
  // 设置PassiveMode传输
  
ftp.enterLocalPassiveMode();
  // 设置以二进制流的方式传输
  
ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
  
ftp.setFileType(FTP.BINARY_FILE_TYPE);
  reply =
ftp.getReplyCode();
  if (!FTPReply.isPositiveCompletion(reply)) {
   
ftp.disconnect();
   logger.error("----------->>>连接ftp服务器失败");
   // throw new Exception("----------->>>连接ftp服务器失败");
  }
  logger.info("-----连接ftp服务器成功");
  boolean isChangeWork =
ftp.changeWorkingDirectory(path);
  if (!isChangeWork) {
   throw new IOException("ftp 目录不存在");
  }
  InputStream input =
ftp.retrieveFileStream(filename);
  int buf = -1;
  while ((buf = input.read()) != -1) {
   out.write(buf);
  }
  out.flush();
  input.close();
  
ftp.logout();
  logger.info("----------->>>文件下载成功");
  if (
ftp.isConnected()) {
   try {
    
ftp.disconnect();
   } catch (IOException ioe) {
    logger.error("----------->>>ftp连接关闭失败 " + ioe.getMessage());
   }
  }
  return success;
 }
}

 这段是文件封装

© 著作权归作者所有

DavidBao
粉丝 114
博文 213
码字总数 126729
作品 0
昌平
私信 提问
加载中

评论(0)

Java中实现FTP上传下载文件的功能,完整代码

一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法、下载文件的通用方法以及删除文件、在ftp服务器上穿件文件夹、检测文件夹是否存在等,里面的有些代码...

Carl_
2014/11/12
7.1K
4
Java使用SFTP和FTP两种连接方式实现对服务器的上传下载

一、Java实现对SFTP服务器的文件的上传下载 1、添加maven依赖: 2、SFTPUtils工具类: 二、Java实现对FTP服务器的文件的上传下载 有时系统可能要兼容ftp和sftp,而ftp的端口一般是21,sftp对...

灌南高手No1
2018/09/12
0
0
ftp4j 1.5.1 发布,Java的FTP类库

ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能。可以将ftp4j嵌到你的Java应用中,来传输文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,...

红薯
2010/05/30
629
0
Java中使用FTPClient上传下载

转自:http://blog.csdn.net/hbcui1984/article/details/2720204 在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClie...

王培
2017/07/07
0
0
Apache commons ftp API 的Spike

由于公司给了我一个传FTP的任务,刚好可以学习一下,同时也进行了一些单元测试,spike了一把,哈哈。分享一下。 这里只对最简单常用的FtpClient的上传下载列表功能进行测试学习使用^-^ 创建一...

XzhiF
2013/12/13
727
9

没有更多内容

加载失败,请刷新页面

加载更多

唐宇迪-人工智能学习路线(下篇)

唐宇迪:51CTO微职位讲师,计算机博士,人工智能专家 内容梗概:介绍人工智能学习步骤和知识框架。人工智能的学习可以拆分为7步,此为4-7步:下篇。 第4步:深度学习 1)深度学习概述 终于说...

osc_jcfo5qp3
15分钟前
9
0
Vue权限管理解决方案

中文 | English vue-access-control []() :gem: Vue权限管理解决方案 介绍 Vue-Access-Control是一套基于Vue/Vue-Router/axios 实现的前端用户权限控制解决方案,通过对路由、视图、请求三个...

osc_m8miia9c
16分钟前
10
0
工欲善其事,必先利其器——DevOps中如何管理工具包

一、背景 作为DevOps交付流水线的开发者,为支持CI/CD中各项任务的自动化,都需要依赖多种包管理工具来下载各种相关的工具,比如针对产生最终交付件的构建过程,就需要在构建流程的第一步,自...

osc_63i522q0
18分钟前
13
0
G++编译期间的四个过程

编写文件mian.cpp,代码示例是 https://www.cnblogs.com/zjiaxing/p/5557549.html 中的。 1 #include <iostream> 2 using namespace std; 3 #define pi 3.14 4 static int t = 1;......

osc_4qu6doqx
18分钟前
7
0
MySQL5.7详解安装配置

MySQL5.7详解安装配置 步骤1:下载安装 可以去mysql的官网下载,也可以直接下载小落上传到CSDN的资源 官网下载地址:https://dev.mysql.com/downloads/installer/ 本博客使用64位免安装版进行...

osc_8exjk9uk
21分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部