zoukankan      html  css  js  c++  java
  • ftp上传下载附件

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPReply;
    import org.apache.log4j.Logger;
    
    public class FtpUtil {
        
        // 创建FTPClient对象
        private int maxSize = 10240;//lt20140320 用于控制上传文件流的最大限制,单位是kb,页面显示限制为10M
        private FTPClient ftp = new FTPClient();
        private final static Logger logger = Logger.getLogger(FtpUtil.class);
        
        /**
          * Description: 向FTP服务器上传文件
          * @param url FTP服务器hostname
          * @param port FTP服务器端口
          * @param username FTP登录账号
          * @param password FTP登录密码
          * @param path FTP服务器保存目录
          * @param filename 上传到FTP服务器上的文件名
          * @param input    输入流
          * @return 成功返回true,否则返回false
          */
         public boolean uploadFile(String url, int port, String username,
            String password, String path, String filename, InputStream input) {
            // 初始表示上传失败
            boolean success = false;
            
            // 创建FTPClient对象
            try {
                int reply;
                // 连接FTP服务器
                // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
                ftp.connect(url, port);
                
                //lt20140320 控制文件流的最大限制,页面显示限制为10M
                ftp.setBufferSize(maxSize);
                
                // 登录ftp
                ftp.login(username, password);
                
                // 看返回的值是不是230,如果是,表示登陆成功
                reply = ftp.getReplyCode();
                
                // 以2开头的返回值就会为真
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    return success;
                }
                
                //验证是否有该文件夹,有就转到,没有创建后转到根目录下
                if (path != null && !"".equals(path)) {
                    if (!ftp.changeWorkingDirectory(path)) {
                        mkdirs(path);
                        
                        if(!ftp.changeWorkingDirectory(path)){
                            logger.warn("ftp changeWorkingDirectory failed. path:"+path);
                        }
                    }
                }
                
                // 转到指定上传目录
                //ftp.changeWorkingDirectory(path);
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//关键,必加,否则按照默认的ascii上传,会出现文件损坏的现象  
    
                // 将上传文件存储到指定目录
                ftp.storeFile(filename, input);
                
                // 退出ftp
                ftp.logout();
                
                // 表示上传成功
                success = true;
            } catch (IOException e) {
                logger.error(e);
            } finally {
                if (ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch (IOException ioe) {
                        ioe.printStackTrace();
                    }
                }
                if (input !=null) {
                    // 关闭输入流
                    try {
                        input.close();
                    } catch (IOException ioe) {
                        ioe.printStackTrace();
                    }
                }
            }
            return success;
        }
        
         /**
          * 在服务器上建目录,中间目录不存在也自动创建
          * @param path
          */
        private boolean mkdirs(String path) throws IOException {
            int index = 0;
            String pathToMake = null;
            boolean result =  false;
            
            //父目录
            while((index = path.indexOf('/', index+1)) > 0){
                pathToMake = path.substring(0,index);
                result = ftp.makeDirectory(pathToMake);
                if(!result){
                    logger.debug("ftp makeDirectory failed. path:"+pathToMake);
                }
            }
            
            //目标目录
            result = ftp.makeDirectory(path);
            if(!result){
                logger.warn("ftp makeDirectory failed. path:"+path);
            }
            
            return result;
        }
    
        /**
         * @param url ftp服务器ip地址
         * @param port ftp端口
         * @param username 用户名
         * @param password 密码
         * @param filePath 删除文件路径
         * @param fileName 要删除文件名
         * @return
         */
        public boolean deleteFile(String url, int port, String username,
                String password, String filePath, String fileName) {
            
            // 初始表示下载失败
            boolean success = false;
    
            try {
                int reply;
                // 连接FTP服务器
                // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
                ftp.connect(url, port);
                // 登录ftp
                ftp.login(username, password);
                reply = ftp.getReplyCode();
                
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    return success;
                }
                
                // 转到指定下载目录
                if (filePath != null) {//验证是否有该文件夹,有就转到,没有创建后转到该目录下  
                    if (!ftp.changeWorkingDirectory(filePath)) {  
                        return success;
                    }
                }
    
                String fn = toFtpFilename(fileName);
                
                // 删除文件
                success = ftp.deleteFile(filePath + "/" + fn);
                
                // 退出ftp
                ftp.logout();
            } catch (Exception e) {
                logger.error(e);
            } finally {
                if (ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch (IOException ioe) {
                    }
                }
            }
            return success;
        }
    
        private String toFtpFilename(String fileName) throws Exception {
            return new String(fileName.getBytes("GBK"),"ISO8859-1");
        }
    
        /**
          * Description: 从FTP服务器下载文件
          * @param url  FTP服务器hostname
          * @param port   FTP服务器端口
          * @param username  FTP登录账号
          * @param password   FTP登录密码
          * @param remotePath   FTP服务器上的相对路径
          * @param fileName  要下载的文件名
          * @param localPath  下载后保存到本地的路径
          * @return
          */
        public boolean downFileFromFtp(String url, int port, String username,
                String password, String remotePath, String fileName, String localPath) {
            // 初始表示下载失败
            boolean success = false;
            OutputStream is = null;
            
            try {
                int reply;
                // 连接FTP服务器
                // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
                ftp.connect(url, port);
                // 登录ftp
                ftp.login(username, password);
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    return success;
                }
                // 转到指定下载目录
                if (remotePath != null) {//验证是否有该文件夹,有就转到,没有创建后转到该目录下  
                    if (!ftp.changeWorkingDirectory(remotePath)) {  
                        return success;
                    }
                }
                
                //2015/4/28 不需要遍历,改为直接用文件名取
                String fn = toFtpFilename(fileName);
                
                // 根据绝对路径初始化文件
                File localFile = new File(localPath + "/" + fileName);
                
                // 输出流
                is = new FileOutputStream(localFile);
                
                // 下载文件
                boolean retrieveResult = ftp.retrieveFile(fn, is);
                if(!retrieveResult) {
                    return success;
                }
                
                is.close();
                
                // 退出ftp
                ftp.logout();
                
                // 下载成功
                success = true;
                return success;
            } catch (Exception e) {
                logger.error(e);
            } finally {
                if (ftp.isConnected()) {
                    try {
                        ftp.disconnect();
                    } catch (IOException ioe) {
                    }
                }
                
                try {
                    if(is != null) is.close();
                } catch (Exception e2) {
                }
            }
            return success;
        }
        
        /**
         * 提供一个开放的logout接口
         * @throws IOException
         */
        public void ftpLogout() throws IOException{
            this.ftp.logout();
        }
        
        public int getMaxSize() {
            return maxSize;
        }
    
        public void setMaxSize(int maxSize) {
            this.maxSize = maxSize;
        }
    }
    package com.huntto.hii.ydzf.util;
    
    import java.io.InputStream;
    
    import org.apache.struts2.ServletActionContext;
    import org.dom4j.Document;
    import org.dom4j.Element;
    
    import com.huntto.hii.webapp.action.BaseAction;
    import com.huntto.hii.webapp.ftp.FtpUtil;
    import com.huntto.hii.webapp.util.Dom4jUtils;
    
    
    /**
     * ftp配置文件
     * @author li.di
     *
     */
    public class Ydzf_UploadPdf {
        private String ip;// ftp服务器ip
        private int port;
        private String username;
        private String password;
        private String path;
        private static final String FTPCONFIG = "ftpConfiguration.xml";
        public static final String FileDownloadTempDir = ServletActionContext.getServletContext().getRealPath("/wenshu_pdf/");
        
        public void initFtpServerParamsFromConfig() {
            String xmlPath = BaseAction.class.getClassLoader().getResource("/").getPath() + FTPCONFIG;
            if(xmlPath.contains("%20")){
                xmlPath = xmlPath.replaceAll("%20", " ");
            }
            Document doc = Dom4jUtils.File2Document(xmlPath);
            Element root = doc.getRootElement();
            this.ip = root.element("ip").getText();
            this.port = Integer.valueOf(root.element("port").getText());
            this.username = root.element("username").getText();
            this.password = root.element("password").getText();
            this.path = root.element("path").getText();
        }
        /**
         * 上传到FTP服务器上,服务器的配置查看ftpConfiguration.xml文件
         * @param fileName 上传的文件名
         * @param inputStream 要上传的文件输入流
         * @param uploadModule 上传的模块,比如投诉举报传入“TSJB”
         * @param identifer 上传附件到具体的文件夹名
         * @return flag 上传是否成功
         * @throws Exception
         */
        protected boolean fileUploadtoFtpServer(String fileName, InputStream inputStream, String uploadModule, String identifer) throws Exception{
            this.initFtpServerParamsFromConfig();
            boolean flag=false;
            try {
                path = "/"+uploadModule+"/"+identifer;
                FtpUtil ftpUtil = new FtpUtil();
                String fiName = new String(fileName.getBytes(), "ISO8859-1");
                flag = ftpUtil.uploadFile(ip, port, username, password,
                        path, fiName, inputStream);
                System.out.println("附件上传成功?——"+flag);
                return flag;
            } catch (Exception e) {
                e.printStackTrace();
                return flag;
            }
        }
        public String getIp() {
            return ip;
        }
    
        public void setIp(String ip) {
            this.ip = ip;
        }
    
        public int getPort() {
            return port;
        }
    
        public void setPort(int port) {
            this.port = port;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getPath() {
            return path;
        }
    
        public void setPath(String path) {
            this.path = path;
        }
    
        public static String getFiledownloadtempdir() {
            return FileDownloadTempDir;
        }
    }
  • 相关阅读:
    WPF关于改变ListBoxItem的颜色的注意事项以及如何找到ListBox中的ItemsPanel
    WPF中关于配置文件的读取
    C++虚函数和虚函数表
    gdb调试技巧
    libevent和基于libevent的网络编程
    Reactor模式详解
    Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法
    Linux进程间通信——使用共享内存
    Linux进程间通信——使用信号量
    布隆过滤器(Bloom Filter)详解
  • 原文地址:https://www.cnblogs.com/bingrong/p/5421098.html
Copyright © 2011-2022 走看看