zoukankan      html  css  js  c++  java
  • 使用ftp上传文件

    当初做这个的缘由是甲方要求用户上传的文件单独存放在另一台服务器上即文件服务器与项目所在服务器分离。

    第一步,安装Serv-U_FTP_Server,Serv-U FTP Server是一种被广泛运用的FTP服务器端软件。地址:http://www.downza.cn/soft/183848.html

    第二步引入相关jar包:

    <!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>3.6</version>
            </dependency>

    工具类:文件服务器在阿里云,注意主动模式和被动模式配置

        public static boolean storeFtpFile(String now,List<File> filelist,String storePath,String url,int port,String userName,String password) throws FileNotFoundException {
            FileInputStream fis = null;
            boolean result = false;
            FTPClient ftp = new FTPClient();
            ftp.setControlEncoding("UTF-8");
            ftp.setPassiveNatWorkaround(true);
            try {
                // 连接至服务器,端口默认为21时,可直接通过URL连接
                ftp.connect(url, port);
                // 登录服务器
                ftp.login(userName, password);
                // 判断返回码是否合法
                if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                    // 不合法时断开连接
                    ftp.disconnect();
                    // 结束程序
                    return result;
                }
                // 判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
                ftp.enterLocalActiveMode();
    //                        ftp.enterLocalPassiveMode(); 
                // 判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
                String s = "/"+storePath;
                String[] dirs = s.split("/");
                ftp.changeWorkingDirectory("/");            
                    //按顺序检查目录是否存在,不存在则创建目录  
                    for(int i=1; dirs!=null&&i<dirs.length; i++) {  
                        if(!ftp.changeWorkingDirectory(dirs[i])) {  
                            if(ftp.makeDirectory(dirs[i])) {  
                                if(!ftp.changeWorkingDirectory(dirs[i])) {  
                                    return false;  
                                }  
                            }else {  
                                return false;                         
                            }  
                        }  
                    }  
                // 设置文件操作目录
                ftp.changeWorkingDirectory(storePath);
    
    //            ftp.makeDirectory(storePath);
                // 设置文件操作目录
                ftp.changeWorkingDirectory(storePath);
                // 设置文件类型,二进制
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                // 设置缓冲区大小
                ftp.setBufferSize(3072);
                // 上传文件
                
                for(File file:filelist){
                    fis = new FileInputStream(file);
                    String filename=file.getName();
                    String type = FileTypeUtils.getFileType(filename);
                    String name = FileTypeUtils.getName(filename);
                    String ftpName=now+"."+type;
                    result = ftp.storeFile(ftpName, fis);
                    
                }
                
                // 关闭输入流
                fis.close();
                // 登出服务器
                ftp.logout();
            } catch (IOException e) {
                try {
                    // 判断输入流是否存在
                    if (null != fis) {
                        // 关闭输入流
                        fis.close();
                    }
                    // 判断连接是否存在
                    if (ftp.isConnected()) {
                        // 断开连接
                        ftp.disconnect();
                    }
                } catch (IOException e2) {
                    e2.printStackTrace();
                }
                e.printStackTrace();
            } finally {
                try {
                    // 判断输入流是否存在
                    if (null != fis) {
                        // 关闭输入流
                        fis.close();
                    }
                    // 判断连接是否存在
                    if (ftp.isConnected()) {
                        // 断开连接
                        ftp.disconnect();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
  • 相关阅读:
    使用Modelsim对Nios II系统进行系统级仿真
    电视相关知识学习
    SAD和SATD的区别[摘]
    vim自动补全括号的最好方法
    vim sinppets插件介绍
    在centos下安装开发环境
    初始化以及动态设置Edit控件的背景及字体颜色
    CTreeCtrl SetItemData 释放问题
    C#4.0 新特性 匿名方法,lambds
    对象序列化Serialization与Deserialize方法进行反序列化
  • 原文地址:https://www.cnblogs.com/dsh2018/p/9673659.html
Copyright © 2011-2022 走看看