精华内容
下载资源
问答
  • java使用ftp上传文件
    千次阅读
    2019-03-26 09:17:08
    之前上传文件只能在服务器创建文件,但是大小始终是0。搜了以后发现是ftp的被动模式

    所以修改代码

    package com.cn.test;
    
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    
    import java.io.File;
    import java.io.FileInputStream;
    
    
    /**
     *
     * @author 吕孟亮
     *
     */
    public class Test {
        public static void testFTPClient() {
            try {
                //创建一个FTPClient对象
                FTPClient ftpClient = new FTPClient();
                //创建ftp链接
                ftpClient.connect("*.*.*.*", 21);
                //登录ftp,使用用戶名和密碼,没有设置的话使用anonymous,密码随意
                ftpClient.login("anonymous", "");
                //读取本地文件
                FileInputStream inputStream = new FileInputStream(new File("E:\\q.jar"));
                //设置为被动模式(如上传文件夹成功,不能上传文件,注释这行,否则报错refused:connect  )
                ftpClient.enterLocalPassiveMode();
                //设置上传路径
                ftpClient.changeWorkingDirectory("pub/data");
                //修改上传文件格式   2是二进制流
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
                System.out.println("1");
                //上传文件
                ftpClient.storeFile("q2.jar", inputStream);
                System.out.println("2");
                //关闭链接
                ftpClient.logout();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            testFTPClient();
        }
    }
    
    

     

     

    更多相关内容
  • 主要介绍了java使用ftp上传文件示例,需要的朋友可以参考下
  • 0. 导入相关依赖commons-netcommons-net3.6cn.hutoolhutool-all5.3.7org.projectlomboklombok1.18.161. 文件上传代码@Component@Slf4jpublic class FTPTools {/*** 文件上传* @param hostname 域名地址* @param port...

    0. 导入相关依赖

    commons-net

    commons-net

    3.6

    cn.hutool

    hutool-all

    5.3.7

    org.projectlombok

    lombok

    1.18.16

    1. 文件上传代码

    @Component

    @Slf4j

    public class FTPTools {

    /**

    * 文件上传

    * @param hostname 域名地址

    * @param port 端口号

    * @param username 用户名

    * @param password 密码

    * @param fileInfo 待上传的文件

    * @param uploadPath 待上传到的路径

    * @param saveName 预保存的文件名

    * @return

    */

    public static boolean upload(String hostname,int port,String username,String password,String fileInfo,String uploadPath,String saveName){

    boolean flag = false;

    FTPClient ftpClient = null;

    try {

    ftpClient = new FTPClient();

    ftpClient.connect(hostname,port);

    //每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据

    ftpClient.enterLocalPassiveMode();

    //设置二进制传输

    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

    ftpClient.setControlEncoding("UTF-8");

    if(ftpClient.login(username,password)){//若连接成功

    log.info("成功登录到ftp服务端,开始文件上传");

    flag = sendFile(ftpClient,fileInfo,uploadPath,saveName);

    }else{

    log.error("登录到ftp服务端失败,请检查用户名和密码");

    }

    disconnect(ftpClient);

    }catch (SocketException e) {

    log.error("文件{}上传失败:{}",saveName,e.getMessage());

    } catch (IOException e) {

    log.error("文件{}上传失败:{}",saveName,e.getMessage());

    } finally {

    }

    return flag;

    }

    /**

    * 文件传输

    * @param fileInfo

    * @param uploadPath

    * @param saveName

    * @return

    */

    private static boolean sendFile(FTPClient ftpClient, String fileInfo, String uploadPath, String saveName) throws FileNotFoundException,IOException{

    boolean flag = false;

    try(FileInputStream fileInputStream = new FileInputStream(fileInfo)){

    //检查工作目录是否存在

    if(ftpClient.changeWorkingDirectory(uploadPath)){

    if(ftpClient.listFiles(saveName).length != 0){ //检查文件是否已经存在

    boolean deleteFlag = ftpClient.deleteFile(saveName);

    log.info(deleteFlag?"文件已存在,直接删除":"存在同名文件且无法删除,请检查权限");

    }

    flag = ftpClient.storeFile(saveName,fileInputStream);

    log.info(flag?"文件上传成功!":"文件上传失败!");

    }else{

    log.error("找不到要上传的目录");

    }

    }catch (FileNotFoundException e){

    log.error("找不到要上传的文件{}:{}",fileInfo,e.getMessage());

    throw e;

    }catch (IOException e){

    log.error("文件传输异常:{}",e.getMessage());

    throw e;

    }

    return flag;

    }

    /**

    * 断开ftp连接

    * @param ftpClient

    */

    private static void disconnect(FTPClient ftpClient) {

    if (ftpClient.isConnected()){

    try{

    ftpClient.disconnect();

    log.info("ftp连接已关闭,文件上传结束");

    }catch (IOException e){

    log.error("ftp连接关闭失败:{}",e);

    }

    }

    }

    }

    2. FTP模拟测试环境搭建

    通过FileZilla安装模拟环境:

    a. 打开FileZilla的下载中心,下载服务器

    ab9165562e1e941206d9af7fd5426515.png

    b. 选择合适的版本后,直接傻瓜式安装

    c. 配置相关数据

    相关操作流程如下:

    b50865929386b8dc3af471ebd000fb0f.png

    编辑—>用户

    用户名和密码粗略设置如下图所示

    8c9117c24cc088c022b5462f1fd99556.png

    通过FTP上传到的文件位置可按个人情况进行设置,勾选相关权限

    c30d7b459ba5fd1af387c742d2badcc4.png

    以上配置即可满足测试要求,进一步的东西大家可根据需求自行研究,也欢迎留言交流!

    3. 测试代码

    //ftp配置信息

    String hostname = "127.0.0.1"; //域名地址

    int port = 21; //端口号

    String username = "lmh"; //用户名

    String password = "123456"; //密码

    String fileInfo = "E:\\Temporary\\1.file"; //待上传的文件目录

    String uploadPath = "/"; //待上传到的路径

    String saveName = FTP+ "_" + DateUtil.format(new Date(),"yyyyMMdd"); //预保存的文件名

    FTPTools.upload(hostname, port, username, password, fileInfo, uploadPath, saveName);

    4. 测试效果

    f5e94e5711a9ece0d9107f1cf7a3a0a8.png

    附录1 :Hutool

    Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

    Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

    Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

    就比如

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    String date = sdf.format(new Date());

    可以通过Hutool简化为

    String date = DateUtil.format(new Date(),"yyyyMMdd");

    类似的例子很多大家可以自己去官网看,文档清晰明了:https://www.hutool.cn/docs/#/

    附录2:IntelliJ IDEA lombok插件的安装和使用

    到此这篇关于Java使用FTP上传文件并模拟接受的方法的文章就介绍到这了,更多相关Java FTP上传文件内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

    展开全文
  • Java使用FTP上传文件

    万次阅读 热门讨论 2018-02-12 00:51:32
    最近做一个项目,使用文件上传。这里分享一些源码给大家。需要用到的jar包我这里直接pom.xml文件 FTP包 <!--FTP包--> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId>

    最近做一个项目,使用到文件上传。这里分享一些源码给大家。

    需要用到的jar包

    我这里直接用pom.xml文件
    FTP包

    		<!--FTP包-->
    		<dependency>
    			<groupId>commons-net</groupId>
    			<artifactId>commons-net</artifactId>
    			<version>3.5</version>
    		</dependency>
    

    日志包

    		<!--日志包-->
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    			<version>1.2.9</version>
    		</dependency>
    

    整个源码

    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.log4j.Logger;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    /**
     * 通过FTP上传文件
     *
     * @Author lvhaibao
     * @Date 2018/2/11 21:43
     */
    public class FTPTools {
    
        //用于打印日志
        private static final Logger log = Logger.getLogger(FTPUtils.class);
    
        //设置私有不能实例化
        private FTPTools() {
    
        }
    
        /**
         * 上传
         *
         * @param hostname ip或域名地址
         * @param port  端口
         * @param username 用户名
         * @param password 密码
         * @param workingPath 服务器的工作目
         * @param inputStream 要上传文件的输入流
         * @param saveName    设置上传之后的文件名
         * @return
         */
        public static boolean upload(String hostname, int port, String username, String password, String workingPath, InputStream inputStream, String saveName) {
            boolean flag = false;
            FTPClient ftpClient = new FTPClient();
            //1 测试连接
            if (connect(ftpClient, hostname, port, username, password)) {
                try {
                    //2 检查工作目录是否存在
                    if (ftpClient.changeWorkingDirectory(workingPath)) {
                        // 3 检查是否上传成功
                        if (storeFile(ftpClient, saveName, inputStream)) {
                            flag = true;
                            disconnect(ftpClient);
                        }
                    }
                } catch (IOException e) {
                    log.error("工作目录不存在");
                    e.printStackTrace();
                    disconnect(ftpClient);
                }
            }
            return flag;
        }
    
        /**
         * 断开连接
         *
         * @param ftpClient
         * @throws Exception
         */
        public static void disconnect(FTPClient ftpClient) {
            if (ftpClient.isConnected()) {
                try {
                    ftpClient.disconnect();
                    log.error("已关闭连接");
                } catch (IOException e) {
                    log.error("没有关闭连接");
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 测试是否能连接
         *
         * @param ftpClient
         * @param hostname  ip或域名地址
         * @param port      端口
         * @param username  用户名
         * @param password  密码
         * @return 返回真则能连接
         */
        public static boolean connect(FTPClient ftpClient, String hostname, int port, String username, String password) {
            boolean flag = false;
            try {
                //ftp初始化的一些参数
                ftpClient.connect(hostname, port);
                ftpClient.enterLocalPassiveMode();
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.setControlEncoding("UTF-8");
                if (ftpClient.login(username, password)) {
                    log.info("连接ftp成功");
                    flag = true;
                } else {
                    log.error("连接ftp失败,可能用户名或密码错误");
                    try {
                        disconnect(ftpClient);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            } catch (IOException e) {
                log.error("连接失败,可能ip或端口错误");
                e.printStackTrace();
            }
            return flag;
        }
    
        /**
         * 上传文件
         *
         * @param ftpClient
         * @param saveName        全路径。如/home/public/a.txt
         * @param fileInputStream 要上传的文件流
         * @return
         */
        public static boolean storeFile(FTPClient ftpClient, String saveName, InputStream fileInputStream) {
            boolean flag = false;
            try {
                if (ftpClient.storeFile(saveName, fileInputStream)) {
                    flag = true;
                    log.error("上传成功");
                    disconnect(ftpClient);
                }
            } catch (IOException e) {
                log.error("上传失败");
                disconnect(ftpClient);
                e.printStackTrace();
            }
            return flag;
        }
    }
    
    

    测试

    我这里写了一个测试方法,如下

    import net.sunniwell.ids.common.utils.FTPTools;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    
    /**
     * @Author lvhaibao
     * @Date 2018/2/11 22:20
     */
    public class MainTest {
    
        public static void main(String[] args) throws FileNotFoundException {
            String hostname = "192.168.1.156";
            int port = 21;
            String username = "lvhaibao";
            String password = "123456";
            String workingPath = "/home/lvhaibao/";
            String str = "E:\\mavenrepo\\aopalliance\\aopalliance\\1.0\\aopalliance-1.0.jar";
            InputStream fileInputStream = new FileInputStream(new File(str));
            String saveName = "aa.jar";
            System.out.println(FTPTools.upload( hostname, port, username, password, workingPath, fileInputStream, saveName));
        }
    }
    

    测试结果

    SLF4J: The requested version 1.7.16 by your slf4j binding is not compatible with [1.6]
    SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
    00:39:43.039 [main] INFO net.sunniwell.ids.common.utils.FTPUtils - 连接ftp成功
    00:39:43.059 [main] ERROR net.sunniwell.ids.common.utils.FTPUtils - 上传成功
    00:39:43.059 [main] ERROR net.sunniwell.ids.common.utils.FTPUtils - 已关闭连接
    true
    

    总结

    主要用到以下几个步骤

    1. 测试连接
      ftpClient.connect(hostname, port);
    2. 检查上传的工作目录是否存在
      ftpClient.changeWorkingDirectory(workingPath)
    3. 上传
      ftpClient.storeFile(saveName, fileInputStream)
    4. 断开连接
      ftpClient.disconnect()

    源码地址
    https://github.com/lvhaibao/MyDemo
    找到FTPTools.java即可
    想学习更多有关FTP的使用方法可以去官方查看API文档
    地址为:
    http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html
    如果有不懂的,欢迎在下方评论。

    展开全文
  • java使用FTP上传文件

    2013-09-05 17:09:07
    java使用FTP上传文件,非常实用 包括创建ftp链接,上传
  • java实现的ftp文件上传

    2016-03-16 11:39:46
    java实现的ftp文件上传
  • 使用java进行ftp文件上传下载demo(含jar),项目能直接运行
  • java ftp上传文件

    千次阅读 2022-03-23 13:52:26
    <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId>...import java.io.IOException;...import java.io.InputStream;...import java...
     <dependency>
         <groupId>commons-net</groupId>
         <artifactId>commons-net</artifactId>
         <version>1.4.1</version>
    </dependency>
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.File;
    import java.io.FileInputStream;
    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    
    
    public class FtpUtils {
    
    
        public static final String hostname = "";
        public static final String   username = "";
        public static final Integer port = 21 ;
    
        public static final String   password = "";
    
        public FTPClient ftpClient = null;
    
        public static void main(String[] args) {
            FtpUtils ftp =new FtpUtils();
            ftp.uploadFile("/20190632/", "1.mp4","/Users/jinx/Downloads/0001180614000233_20190621074125_inCarVideo.mp4");
        }
    
        /**
         * 上传文件
         * @param pathname ftp服务保存地址文件夹路径
         * @param fileName 上传到ftp的文件名
         *  @param originfilename 待上传文件的名称(绝对地址) *
         * @return
         */
        @SuppressWarnings("static-access")
        public void uploadFile( String pathname, String fileName,String originfilename){
            InputStream inputStream = null;
            FTPClient ftp = new FTPClient();
            ftp.setDefaultTimeout(600*1000);
            ftp.setDataTimeout(600*1000);
            ftp.setControlEncoding("utf-8");
            try{
                inputStream = new FileInputStream(new File(originfilename));
                ftp.connect(hostname, port); //连接ftp服务器
                ftp.login(username, password); //登录ftp服务器
                ftp.enterLocalPassiveMode();
                int replyCode = ftp.getReplyCode(); //是否成功登录服务器
                if(!FTPReply.isPositiveCompletion(replyCode)){
                    //链接失败
                }
                ftp.setFileType(ftpClient.BINARY_FILE_TYPE);
                CreateDirecroty(ftp,pathname);
                ftp.makeDirectory(pathname);
                ftp.changeWorkingDirectory(pathname);
                ftp.storeFile(fileName, inputStream);
                inputStream.close();
                ftp.logout();
                ftp.disconnect();
                inputStream.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
    
        /**
         * 改变目录路径
         * @param directory
         * @return
         */
        public boolean changeWorkingDirectory(FTPClient ftp, String directory) {
            boolean flag = true;
            try {
                flag = ftp.changeWorkingDirectory(directory);
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
            return flag;
        }
    
        /**
         * 创建多层目录文件,如果有ftp服务器已存在该文件,则不创建,如果无,则创建
         * @param ftp
         * @param remote
         * @return
         * @throws IOException
         */
        public boolean CreateDirecroty(FTPClient ftp,String remote) throws IOException {
            boolean success = true;
            String directory = remote + "/";
            // 如果远程目录不存在,则递归创建远程服务器目录
            if (!directory.equalsIgnoreCase("/") && !changeWorkingDirectory(ftp,new String(directory))) {
                int start = 0;
                int end = 0;
                if (directory.startsWith("/")) {
                    start = 1;
                } else {
                    start = 0;
                }
                end = directory.indexOf("/", start);
                String path = "";
                String paths = "";
                while (true) {
                    String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "iso-8859-1");
                    path = path + "/" + subDirectory;
                    if (!existFile(ftp,path)) {
                        if (makeDirectory(ftp,subDirectory)) {
                            changeWorkingDirectory(ftp,subDirectory);
                        } else {
                            changeWorkingDirectory(ftp,subDirectory);
                        }
                    } else {
                        changeWorkingDirectory(ftp,subDirectory);
                    }
    
                    paths = paths + "/" + subDirectory;
                    start = end + 1;
                    end = directory.indexOf("/", start);
                    // 检查所有目录是否创建完毕
                    if (end <= start) {
                        break;
                    }
                }
            }
            return success;
        }
    
        /**
         * 判断ftp服务器文件是否存在
         * @param ftp
         * @param path
         * @return
         * @throws IOException
         */
        public boolean existFile(FTPClient ftp, String path) throws IOException {
            boolean flag = false;
            FTPFile[] ftpFileArr = ftp.listFiles(path);
            if (ftpFileArr.length > 0) {
                flag = true;
            }
            return flag;
        }
    
    
    
    
        /**
         * 创建目录
         * @param ftp
         * @param dir
         * @return
         */
        public boolean makeDirectory(FTPClient ftp,String dir) {
            boolean flag = true;
            try {
                flag = ftp.makeDirectory(dir);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return flag;
        }
    
    
    
    
    
    }

    展开全文
  • ftp文件传输协议是应用层协议,用于传输文件信息,linux上需要安装vsftpd才能使用(明文传输) ftps为FTP协议和数据通道添加了SSL功能,可以对传输信息加密 2.ftp传输文件 引入maven依赖 <!-- ...
  • java实现ftp上传文件到服务器 内容精选换一换怎样上传文件到Windows操作系统云服务器?安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云...
  • FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。接下来通过本文给大家实例讲解Java实现FTP文件上传和下载功能,需要的的朋友一起看看吧
  • 主要介绍了Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法,需要的朋友可以参考下
  • 主要介绍了Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
  • JAVA操作FTP文件服务器上传与下载文件,包含远程动态创建文件夹、查看文件是否存在、删除文件、上传文件和下载文件等方法
  • java实现ftp文件上传 1、ftp文件上传步骤 1)连接ftp 2)检查工作目录是否存在 3)检查是否上传成功 4)完成任务后,断开ftp 2、具体如下,直接贴上核心代码: A)导入核心pom依赖 <!--FTP包--> <...
  • Java FTP 客户端用java编写的FTP客户端,可以一次上传多个文件。 编译: $ javac FTPClient.java 跑步: $ java FTPClient -u username -p password -server server -files file1:file2:file3 用户名、密码和服务器...
  • javaftp上传下载文件

    2018-06-04 23:56:52
    javaftp下载和上传文件.和sftp下载上传文件,jar包已经maven化.放入仓库即可使用
  • 主要介绍了JAVA技术实现上传下载文件FTP服务器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件上传/下载/删除等操作,需要的朋友可以参考下
  • java上传文件ftp.txt

    2019-06-05 16:08:25
    通过java程序来实现将本地文件上传ftp服务器的功能
  • java FTP服务器文件上传下载,查找文件目录,不存在则添加,创建多级文件夹,java ,demo 直接使用,内有jar包
  • Java项目实现文件上传FTP

    千次阅读 2021-07-21 15:08:45
    目录一、介绍二、pom依赖及配置文件三、Controller控制层接收文件四、Service业务层五、上传测试 一、介绍 街道一个需求,需要提供一个接口,将资质文件...-- ftp上传下载--> <dependency> <groupId&
  • 本篇文章主要介绍了Apache FTP实现文件上传、下载、修改文件名、删除,实现了FTP文件上传(断点续传)、FTP文件下载、FTP文件重命名、FTP文件删除等功能,有需要的可以了解一下。
  • java实现文件上传ftp服务器上 内容精选换一换域名认证时,需要将下载的认证文件上传到网站根目录,然后进行认证。用户使用的服务器不同,文件上传的位置有所不同,请参照以下方法完成认证文件上传。如果网站所...
  • javaftp文件上传到服务器[2021-01-29 17:23:55]简介:服务器Mac本地文件上传到CentOS中,可以使用scp指令可以完成ContOS端安装openssh-clients通过yum安装执行yum install openssh-clienphp去除nbsp的方法:首先创建...
  • FTP文件上传失败Java

    2021-02-13 01:01:06
    我在Java项目中使用Apache的FTPClient和FTPServer库.服务器和客户端在同一台机器上.我的FTPServer应该是本地服务器,与Internet无关.我可以从客户端连接到FTPServer(我得到230作为回复代码),但我似乎无法做任何事情....
  • 主要为大家详细介绍了java实现FTP文件上传文件下载的相关资料,通过以下两种方式实现,通过JDK自带的API实现,二是通过Apache提供的API是实现,感兴趣的小伙伴们可以参考一下
  • javaftp上传文件.txt

    2017-11-29 17:10:32
    javaftp上传文件.txt javaftp上传文件.txt javaftp上传文件.txt
  • 主要为大家详细介绍了java实现ftp上传的相关资料,教大家如何创建文件夹?具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,196
精华内容 15,278
关键字:

java使用ftp上传文件