.net fileupload批量上传可删除_java实现ftp下载,java实现ftp上传下载文件

最近项目中需要实现将文件先存放到ftp上,需要的时候再从ftp上下载,做的过程中碰到了问题,发现中文文件名的无法上传到ftp上,ftp上的中文文件名的文件下载不下来,几番折腾,终于搞定了,记录一下备忘。

iis7服务器管理工具(曾用名:IIS7远程桌面)当前可批量管理的为:win系列的操作系统(含VPS、VM)、linux操作系统:CentOS、Ubuntu、Debian等,支持命令及可视化SFTP管理、linux的vnc、win的vnc、FTP,webshell

IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新。IIS7服务器管理工具适用于Windows操作系统和liunx操作系统;支持Ftp客户端批量操作。

下载地址:http://fwqglgj.iis7.net/cp/ftp/?hcfd-zc

416ebfa5d978e3ec0097759a692c9725.png

首先给工程添加maven依赖,pom.xml文件中添加:

    commons-net    commons-net    1.4.1

以下是Ftp工具类:

package com.test.util; import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.SocketException; import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply; public class FtpUtil {    private final static Log logger = LogFactory.getLog(FtpUtil.class);        /**      * 获取FTPClient对象      * @param ftpHost       FTP主机服务器      * @param ftpPassword   FTP 登录密码      * @param ftpUserName   FTP登录用户名      * @param ftpPort       FTP端口 默认为21      * @return      */      public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) {          FTPClient ftpClient = new FTPClient();          try {              ftpClient = new FTPClient();              ftpClient.connect(ftpHost, ftpPort);              // 连接FTP服务器              ftpClient.login(ftpUserName, ftpPassword);        // 登陆FTP服务器             ftpClient.setControlEncoding("UTF-8");             // 中文支持              ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);              ftpClient.enterLocalPassiveMode();              if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {                  logger.info("未连接到FTP,用户名或密码错误。");                  ftpClient.disconnect();              } else {                  logger.info("FTP连接成功。");              }          } catch (SocketException e) {              e.printStackTrace();              logger.info("FTP的IP地址可能错误,请正确配置。");          } catch (IOException e) {              e.printStackTrace();              logger.info("FTP的端口错误,请正确配置。");          }          return ftpClient;      }        /*      * 从FTP服务器下载文件      * @param ftpHost             FTP IP地址      * @param ftpUserName         FTP 用户名      * @param ftpPassword         FTP用户名密码      * @param ftpPort             FTP端口      * @param ftpPath             FTP服务器中文件所在路径 格式: ftptest/aa      * @param localPath           下载到本地的位置 格式:H:/download      * @param fileName            FTP服务器上要下载的文件名称     * @param targetFileName      FTP服务器上要下载的文件名称      */      public static void downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String localPath, String fileName, String targetFileName) {            FTPClient ftpClient = null;          try {              ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);              ftpClient.changeWorkingDirectory(ftpPath);                        String f_ame = new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING);//编码文件格式,解决中文文件名                        File localFile = new File(localPath + File.separatorChar + targetFileName);              OutputStream os = new FileOutputStream(localFile);              ftpClient.retrieveFile(f_ame, os);              os.close();              ftpClient.logout();            } catch (FileNotFoundException e) {              logger.error("没有找到" + ftpPath + "文件");              e.printStackTrace();          } catch (SocketException e) {              logger.error("连接FTP失败.");              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();              logger.error("文件读取错误。");              e.printStackTrace();          }      }        /**       * Description:             向FTP服务器上传文件       * @param host              FTP服务器hostname       * @param port              FTP服务器端口       * @param username          FTP登录账号       * @param password          FTP登录密码       * @param basePath          FTP服务器基础目录      * @param filePath          FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath      * @param filename          上传到FTP服务器上的文件名       * @param input             输入流       * @return                  成功返回true,否则返回false       */        public static boolean uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String filename, InputStream input) {          boolean result = false;          FTPClient ftpClient = new FTPClient();          try {              int reply;              ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);              ftpClient.changeWorkingDirectory(ftpPath);                        reply = ftpClient.getReplyCode();            if (!FTPReply.isPositiveCompletion(reply)) {                ftpClient.disconnect();                return result;            }                        filename = new String(filename.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING);    //编码文件名,支持中文文件名            //上传文件              if (!ftpClient.storeFile(filename, input)) {                  return result;              }              input.close();              ftpClient.logout();              result = true;          } catch (IOException e) {              e.printStackTrace();          } finally {              if (ftpClient.isConnected()) {                  try {                  ftpClient.disconnect();                  } catch (IOException ioe) {                  }              }          }          return result;      }        public static void main(String[] args) {        String ftpHost = "192.168.20.40";        String ftpUserName = "test";        String ftpPassword = "12345";        int ftpPort = 21;        String ftpPath = "test/";        String fileName = "test_通知_4724.docx";         //上传一个文件        try{            String tmpPath = System.getProperty("java.io.tmpdir");            FileInputStream in=new FileInputStream(new File("D:" + fileName));            FtpUtil.uploadFile(ftpHost, ftpUserName,  ftpPassword, ftpPort, ftpPath, fileName, in);                        System.out.println(tmpPath);            FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, "E:", "test_通知_4724.docx", "测试下载文件.docx");         } catch (Exception e){            e.printStackTrace();            System.out.println(e);        }    }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值