文件上传

public void upload(HttpServletRequest request) throws IOException {
        String var1 = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");

        String fileUrl = sdf.format(new Date());
        String endName = sdf1.format(new Date());

        MultipartHttpServletRequest multipart = (MultipartHttpServletRequest) request;
        Iterator<String> iterator = multipart.getFileNames();
        while (iterator.hasNext()) {
            MultipartFile multipartFile = multipart.getFile(iterator.next());
            String fileName = multipartFile.getOriginalFilename();
            if (fileName == null || "".equals(fileName.trim())) {
                continue;
            }
            //20170207 针对IE环境下filename是整个文件路径的情况而做以下处理
            Integer index = fileName.lastIndexOf("\\");
            String newStr = "";
            if (index > -1) {
                newStr = fileName.substring(index + 1);
            } else {
                newStr = fileName;
            }
            if (!("").equals(newStr)) {
                fileName = newStr;
            }
            logger.info("new filename: " + fileName);
            String[] str = fileName.split("\\.");
            String name = endName + "." + str[1];

            //文件大小
            Long size = multipartFile.getSize();
            String sizeStr = getNetFileSizeDescription(size);
        
            Boolean flag = ftpUtil.fileUpload(fileUrl, name, multipartFile.getInputStream());


        }

    }

    private String getNetFileSizeDescription(long size) {

        StringBuffer bytes = new StringBuffer();
        DecimalFormat format = new DecimalFormat("###.0");
        if (size >= 1024 * 1024 * 1024) {
            double i = (size / (1024.0 * 1024.0 * 1024.0));
            bytes.append(format.format(i)).append("GB");
        } else if (size >= 1024 * 1024) {
            double i = (size / (1024.0 * 1024.0));
            bytes.append(format.format(i)).append("MB");
        } else if (size >= 1024) {
            double i = (size / (1024.0));
            bytes.append(format.format(i)).append("KB");
        } else if (size < 1024) {
            if (size <= 0) {
                bytes.append("0B");
            } else {
                bytes.append((int) size).append("B");
            }
        }
        return bytes.toString();
    }



public boolean fileUpload(String path, String filename, InputStream input) {
        FTPClient ftp = new FTPClient();
        try {

            ftp.connect(host, port);

            logger.info("*********************FTP INFO START******************************");
            logger.info("FTP Host: " + host);
            logger.info("FTP post: " + port);

            ftp.login(username, password);

            logger.info("FTP username: " + username);
            logger.info("FTP password: " + password);
            logger.info("*********************FTP INFO END******************************");
            //设置文件编码格式
            ftp.setControlEncoding("UTF-8");
            //ftp通信有两种模式
            //PORT(主动模式)客户端开通一个新端口(>1024)并通过这个端口发送命令或传输数据,期间服务端只使用他开通的一个端口,例如21
            //PASV(被动模式)客户端向服务端发送一个PASV命令,服务端开启一个新端口(>1024),并使用这个端口与客户端的21端口传输数据
            //由于客户端不可控,防火墙等原因,所以需要由服务端开启端口,需要设置被动模式
            ftp.enterLocalPassiveMode();
            //设置传输方式为流方式
            ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
            //获取状态码,判断是否连接成功
            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
                throw new RuntimeException("FTP服务器拒绝连接");
            }
            //转到上传文件的根目录
            if (!ftp.changeWorkingDirectory(basePath)) {
                throw new RuntimeException("根目录不存在,需要创建");
            }
            //判断是否存在目录
            if (!ftp.changeWorkingDirectory(basePath + path)) {
                String[] dirs = path.split("/");
                //创建目录
                for (String dir : dirs) {
                    if (null == dir || "".equals(dir)) {
                        continue;
                    }
                    //判断是否存在目录
                    if (!ftp.changeWorkingDirectory(dir)) {
                        //不存在则创建
                        if (!ftp.makeDirectory(dir)) {
                            throw new RuntimeException("子目录创建失败");
                        }
                        //进入新创建的目录
                        ftp.changeWorkingDirectory(dir);
                        logger.info("创建新目录:" + dir);
                    }
                }
                //设置上传文件的类型为二进制类型
                ftp.setFileType(FTP.BINARY_FILE_TYPE);
                //上传文件
                if (!ftp.storeFile(new String(filename.getBytes("UTF-8"), "iso-8859-1"), input)) {
                    return false;
                }
                input.close();
                ftp.logout();
                return true;
            }


        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return false;
    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值