Java实现FTP上传文件

这篇具有很好参考价值的文章主要介绍了Java实现FTP上传文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java实现FTP上传文件

import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPReply;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;


@Slf4j
public class FtpUtil {

    public static FTPClient connection(String hostname,int port,String username,String password){
        FTPClient ftp = new FTPClient();
        try {
            //连接FTP服务器
            ftp.connect(hostname, port);
            //下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
            ftp.setControlEncoding("GBK");
            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
            conf.setServerLanguageCode("zh");
            //登录ftp
            ftp.login(username, password);
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                ftp.disconnect();
            }
        } catch (Exception e) {
            log.error(e.getMessage(),e);
        }
        return ftp;
    }

    public static void uploadFile(FTPClient ftpClient, String path, String directory, String fileName, InputStream inputStream){
        try {
            //让客户端告诉服务端开通一个端口用来数据传输(必须要 不然会一直卡死)
            ftpClient.enterLocalPassiveMode();
            //循环生成目录并进入
            stringPath(ftpClient,path,directory);
            //如果缺省该句 传输txt正常 但图片和其他格式的文件传输出现乱码
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            //开始上传
            ftpClient.storeFile(new String(fileName.getBytes("GBK"), StandardCharsets.ISO_8859_1), inputStream);
            //关闭输入流
            inputStream.close();
        } catch (Exception e) {
            log.error(e.getMessage(),e);
        }
    }

    public static void stringPath(FTPClient ftpClient, String path,String directory) throws IOException {
        List<String> string= Lists.newArrayList();
        Arrays.stream((path+directory).split("/")).filter(StringUtils::isNotBlank).forEach(string::add);
        StringBuilder paths = new StringBuilder();
        for (String s : string) {
            paths.append("/").append(new String(s.getBytes("GBK"), StandardCharsets.ISO_8859_1));
            if(!ftpClient.changeWorkingDirectory(paths.toString())){
                ftpClient.makeDirectory(paths.toString());
            }
        }
        ftpClient.changeWorkingDirectory(paths.toString());
    }

    public static void ftpLogout(FTPClient ftpClient){
        try {
            ftpClient.logout();
        } catch (IOException e) {
            log.error(e.getMessage(),e);
        }
    };

    public static void main(String[] args) {
        String hostname="127.0.0.1";
        int port =9100;
        String username="admin";
        String password="12345678";
        String path="/usr/local/file/";
        String directory="wenzhang";
        String fileName="myFile.xlsx";
        //这里写文件的输入流
        InputStream inputStream = null;

        //连接ftp服务
        FTPClient ftpClient = FtpUtil.connection(hostname, port, username,password);
        //上传ftp文件
        FtpUtil.uploadFile(ftpClient, path, directory, fileName, inputStream);
        //退出ftp
        FtpUtil.ftpLogout(ftpClient);
    }

}

依赖

<!--FTP传输所需协议-->
 <dependency>
     <groupId>commons-net</groupId>
     <artifactId>commons-net</artifactId>
     <version>3.8.0</version>
 </dependency>

文章来源地址https://www.toymoban.com/news/detail-510615.html

到了这里,关于Java实现FTP上传文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 使用FTP上传文件、下载文件,实现数据传输

    上传文件的方法调用: 下载文件方法:

    2024年02月14日
    浏览(45)
  • Python使用FTP上传文件

    本文主要介绍如何使用Python通过FTP上传文件。 FTP即文件传输协议(File Transfer Protocol),是用于在网络上进行文件传输的一种标准协议。FTP客户端可以将文件从本地上传到服务器或从服务器下载到本地。 Python提供了一个标准库ftplib,用于在Python中实现FTP客户端的功能。使用

    2024年02月09日
    浏览(41)
  • 完全解决FTP上传文件名称中文乱码问题

    今天项目上加了个定时扫描本地文件路径下所有文件实现自动上传至ftp文件服务器的功能,经测试发现一旦上传中文名称的文件就会乱码或者文件上传不了。初步排查就是FTP服务器字符编码的问题。在网上查了很多资料都没有效果。在这里讲一下我踩过的坑,以及分享我能上

    2024年02月13日
    浏览(54)
  • python 数据文件上传到ftp服务器

    场景:客户的某数据文件需要定时推送到一个第三方平台的ftp服务器上,第三方平台会对上传过来的数据文件进行解析。 一、通过FTP将文件上传到服务器,需要满足以下几个条件: 本服务器和ftp服务器是联通的 需要ftp服务器的IP,用户,密码,端口,ftp服务器文件要存放的

    2024年02月15日
    浏览(61)
  • 使用hutool进行ftp文件下载和上传

    2024年02月11日
    浏览(43)
  • FTP服务器文件自动上传、下载(bat)

    tips: 可以参照标题3上面的配置,自行调整本地路径、FTP服务器路径、账号密码等

    2024年02月15日
    浏览(40)
  • 【Java实现文件上传】java后端+vue前端实现文件上传全过程详解(附源码)

    【 写在前面 】其实这篇文章我早就想写了,只是一直被需求开发耽搁,这不晚上刚好下班后有点时间,记录一下。需求是excel表格的上传,这个是很多业务系统不可或缺的功能点,再此也希望您能够读完我这篇文章对文件上传不再困惑。(文件下载见另外一篇) 涉及知识点

    2024年02月06日
    浏览(51)
  • windows bat 脚本实现FTP自动下载上传

    注:Windows 连接 FTP 下载时,如果密码中有特殊字符,具体是那个特殊字符不支持需要依据使用的 FTP 测试,需要使用 ^ 参数。 示例:密码中包含 ^ 时则不能识别,需要使用 ^^^ ,显示结果为 ^ 或者使用如下格式          

    2024年02月12日
    浏览(42)
  • Java实现文件分片上传

    Java实现文件分片上传 为什么要使用分片上传 在需要上传文件时,不可避免地会遇到上传文件内容过大,上传时间太长地问题,采用文件分片上传就可以解决这个问题。 什么是分片上传? 简单的说就是本来是需要一次搬一个很大的东西,比如是一大桶水,一次搬起来比较费

    2024年02月08日
    浏览(53)
  • JAVA后端MultipartFile实现文件上传

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包