为了实现 FTP上传下载,大概试了两个方法

sun.net.ftp.FtpClient

org.apache.commons.net

一开始使用sun.net.ftp.FtpClient,结果发现唯一的问题是它不可以创建目录,

随后试了下org.apache.commons.net,创建目录倒是没有问题,不过用FTPClient 的storeFile方法存储文件的时候发现文本文件正常,但是存储word 或者是压缩包等等的文件就会损坏,由于时间紧迫,网上也没有找到有效的解决办法,结果最后还是采用sun.net.ftp.FtpClient方法

sun.net.ftp.FtpClient中的sendserver方法可以发送FTP服务器的命令,从而可以通过它发送XMDK命令来创建目录

值得注意的是使用sendserver发送命令后,还应该要解析发回来的返回信息。并不是一个命令发送完后就可以发送下一个命令。有时候要等待到就绪状态才行。

使用ftpclient.readServerResponse来接收服务器发回来的执行结果

附代码:

sun.net.ftp.FtpClient:

// 连接ftp服务器

private void connectServer(String server, String user, String password, String path) throws IOException {

ftpClient_sun = new FtpClient();

ftpClient_sun = new FtpClient();

ftpClient_sun.openServer(server,22);

ftpClient_sun.login(user, password);

// path是FTP服务下主目录的子目录

if (path.length() != 0)

ftpClient_sun.cd(path);

ftpClient_sun.sendServer("XMKD test\r\n");

ftpClient_sun.readServerResponse();

ftpClient_sun.cd("test");

// 用2进制上传

ftpClient_sun.binary();

System.out.println("登录成功");

}

// 上传文件;并返回上传文件的信息

private String upload(FormFile formFile) throws Exception {

TelnetOutputStream os = null;

InputStream is = null;

try {

os = ftpClient_sun.put("upftp"+getName()+"." + getExtName(formFile.getFileName()));

is = formFile.getInputStream();

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

}

} finally {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

}

return "上传文件成功!";

}

/**

* 下载文件

*

* @param fileName

*            FormFile对象

* @param HttpServletResponse

*            HTTP响应

* @throws IOException

*/

private void download(String fileName, HttpServletResponse response) throws IOException {

TelnetInputStream ftpIn = ftpClient_sun.get(fileName);

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

OutputStream out = null;

try {

out = response.getOutputStream();

IOUtils.copy(ftpIn, out);

} finally {

if (ftpIn != null) {

ftpIn.close();

}

}

}

/**

* 展示图片     *

* @param fileName

*            FormFile对象

* @param HttpServletResponse

*            HTTP响应

* @throws IOException

*/

private void show(String fileName, HttpServletResponse response) throws IOException {

TelnetInputStream ftpIn = ftpClient_sun.get(fileName);

OutputStream out = null;

try {

out = response.getOutputStream();

IOUtils.copy(ftpIn, out);

} finally {

if (ftpIn != null) {

ftpIn.close();

}

}

}

org.apache.commons.net

// 连接ftp服务器

private void connectServer(String server, String user, String password, String path) throws IOException {

try {

ftpClient = new FTPClient();

ftpClient.connect(server);

ftpClient.login(user, password);

System.out.println(" login success !!! ");

if (path.length() != 0) {

boolean flag = ftpClient.changeWorkingDirectory(path);

if (flag) {

System.out.println(" set working directory successful !!! ");

}else

{

ftpClient.makeDirectory(path);

ftpClient.changeWorkingDirectory(path);

}

}

}

catch (IOException e) {

System.out.println(" not login !!! ");

System.out.println(e.getMessage());

}

}

// 上传文件;并返回上传文件的信息

private String upload(FormFile formFile) throws Exception {

InputStream fis = formFile.getInputStream();

// 上传本地文件到服务器上(文件名以'temp_'开头,当上传完毕后,名字改为正式名)

boolean flag = ftpClient.storeFile("upftp"+getName()+"."+getExtName(formFile.getFileName()), fis);

if (flag) {

System.out.println(" upload success !!! ");

}

// 关闭文件流

fis.close();

return "上传文件成功!";

}

java ftp上传文件_jaVA使用FTP上传下载文件的问题相关推荐

  1. java下载网络文件_java 从网络Url中下载文件

    /** * 从网络Url中下载文件 * @param urlStr * @param fileName * @param savePath * @throws IOException */ publi ...

  2. linux下载文件夹到本地命令行,linux下载文件到本地命令,linux下载文件到本地命令 下载工具...

    linux下载文件到本地命令,linux下载文件到本地命令 下载工具 来源:互联网/编辑:佚名/时间:2020-09-08 在手机上看 扫一扫进入手机端 linux用户命令在哪个文件夹下 用 whic ...

  3. 前端将二进制数据流转为文件_前端通过二进制流下载文件

    JS下载文件两种方式总结: 下载文件主要分为两种形式,具体使用哪种方式取决于后台: 1.如果后台服务器的静态目录有可供下载的静态资源,后台接口返回文件路径,直接window.location.href ...

  4. java操作文件_java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  5. java sftp上传文件_Java通过sftp上传文件

    Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作. 如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步,引入依赖包 com.jcraf ...

  6. java ftp 文件移动文件_java实现FTP远程文件移动(重命名、复制、拷贝)

    首先就标题说明一点,java使用org.apache.commons.net.ftp.ftpclient包来操作FTP是很爽滴,但对远程文件操作,好像没有实现 复制文件的方法.我用的是文件移动(mov ...

  7. java url 上传文件_Java使用HttpURLConnection上传文件(转)

    从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是 ...

  8. java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法

    本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...

  9. java sftp 上传文件_java使用SFTP上传文件到资源服务器

    本文实例为大家分享了java实现SFTP上传文件到资源服务器工具类,供大家参考,具体内容如下 首先得创建连接sftp服务器的公共类MySftp.java: package cn.test.util; ...

最新文章

  1. 2022-2028年中国钢丸行业市场行情监测及未来前景规划报告
  2. iOS 几种初始化的分析比较
  3. freebsd 运维人员
  4. php odbc连接sqlserver,php pdo连接sqlserver配置
  5. TOGAF:从业务架构到业务需求
  6. php cookie加密 类,PHP cookie加密类
  7. redius mysql_采用Linux系统的Freeradius+MySQL实现RADIUS认证服务器
  8. 2019年1月数据库流行度排行: PostgreSQL蝉联2018年度冠军
  9. python中添加路径_python中添加模块导入路径的方法
  10. [dfs] 洛谷 P1242 新汉诺塔
  11. 使用从mysql中取数据
  12. 商用密码应用安全性评估
  13. 对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会【个人复习+zz】...
  14. 微信公众号 Markdown 编辑器
  15. 【Unity3D自学记录】Unity3D游戏开发之自由视角状态下的角色控制(一)
  16. 融云 java_融云开发者文档
  17. ListView的增删改查(实战)
  18. 09组团队项目-Alpha冲刺-1/6
  19. 5和6 objbc oracle_《Oracle Database 12c完全参考手册(第7版)(试读版)》
  20. win10 nas搭建_零起步自建家用NAS

热门文章

  1. ENSP配置 实例八 三层交换机DHCP配置加VLAN划分实验
  2. cmd255command.executereader()打印连接错误_打印经常遇到的几个问题,轻松解决
  3. oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组
  4. Struts 2框架创建的第一个项目
  5. red flag linux指定域名,Red Flag Server 4.1 系统管理手册(适用桌面linux4.1) 6
  6. java线程池执行器_Java线程池ThreadPoolExecutor的使用
  7. A5.2021年全国数学建模竞赛B题-赛题分析与评阅要点(乙醇偶合制备C4烯烃分析)
  8. localstorage存储大小_Cookie 已凉,Web 存储该这么做!
  9. vue中 点击事件的写法_vue中的事件:原生事件与自定义事件__Vue.js
  10. xposed hook 静态函数_浅谈 Xposed 新概念【模块作用域】