SpringMvc下载ftp上的文件并以静态形式展示

该博客详细介绍了如何在SpringMvc中处理FTP文件,通过将FTP上的文件下载到静态目录,然后以静态资源方式供JavaScript访问。主要解决JavaScript无法直接访问FTP地址的问题。
摘要由CSDN通过智能技术生成

由于js中标签无法直接访问ftp地址,所以需要实现下载ftp文件到静态文件目录并重定向至静态文件,现总结如下:

/* 
 * TODO 下载展示ftp上的文件
 * @param dir 文件所在文件夹
 * @param fileName 文件名
 */
public void downloadFTPFile(String dir,String fileName){
    String host="http://" + request.getLocalAddr() + ":" + request.getLocalPort() + "/msweb/file/";
    // 获取存放静态文件的目录
    String localPath = request.getSession().getServletContext().getRealPath("file") + "\\" + dir;
    Path filePath = FileSystems.getDefault().getPath(localPath, fileName);

    InputStream is = null;
    try {

        // 如果目标文件存在,直接返回静态文件路径
        if (!filePath.toFile().exists()) {

        //  目标不存在,判断目标文件夹是否存在并创建
        File dirFile = new File(localPath);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }

        ftpClient = new FTPClient();

        if (config.FTP_SERVER_PORT == 0) {
            logger.debug("Connect to FTP server on " + config.FTP_SERVER_IP + ":" + FTP.DEFAULT_PORT);
            ftpClient.connect(config.FTP_SERVER_IP);
        } else {
            logger.debug("Connect to FTP server on " + config.FTP_SERVER_IP + ":" + config.FTP_SERVER_PORT);
            ftpClient.connect(config.FTP_SERVER_IP, config.FTP_SERVER_PORT);
        }
        int reply = ftpClient.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            logger.error("FTP server refuses connection");
        }

        logger.debug("Log in FTP server with username = " + config.FTP_USER_NAME + ", password = "
                + config.FTP_PASSWORD);
        if (!ftpClient.login(config.FTP_USER_NAME, config.FTP_PASSWORD)) {
            logger.error("Fail to log in FTP server with username = " + config.FTP_USER_NAME + ", password = "
                    + config.FTP_PASSWORD);
            ftpClient.logout();
        }
        String workingDirectory = "/";
        if (!StringUtils.isBlank(config.FTP_WORKING_DIRECTORY)) {
            workingDirectory = config.FTP_WORKING_DIRECTORY + "/" + dir + "/";
        }

        logger.debug("Change current working directory to " + workingDirectory);
        ftpClient.changeWorkingDirectory(workingDirectory);
        is = ftpClient.retrieveFileStream(fileName);
        Files.copy(is, filePath);
        }
    } catch (Exception e) {
        logger.error(e);
    }

    finally {
        try {
            if (ftpClient.isConnected()) {
                ftpClient.disconnect();
            }
            if (is != null) {
                is.close();
            }
            response.sendRedirect(host+dir+"/"+ fileName);
        } catch (IOException f) {
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值