本地文件上传FTP服务器,本地建FTP服务器可上传,连接别人本地FTP服务器也能上传,测试环境不能

本地文件上传FTP服务器,本地建了FTP服务器,可上传,连接别人的本地FTP服务器也能上传,测试环境不能

直接贴代码

FtpUtil类:
import com.htsc.zggz.config.FtpConfig;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import org.apache.poi.util.IOUtils;

import java.io.*;

/**

  • ftp工具类
    */
    public class FtpUtil {
    private static FTPClient ftp;
    private static FtpConfig ftpCfg;
    private static Logger logger = Logger.getLogger(FtpUtil.class);

    public FtpUtil(FtpConfig ftpCfg) {
    this.ftpCfg = ftpCfg;
    this.ftp = new FTPClient();
    }

/* *
* ftp服务登录
*
* @return*/

public static boolean open() throws Exception {
    //ftp已连接
    if (ftp.isConnected()) {
        return true;
    }
    ftp.connect(ftpCfg.getFtpIp(), ftpCfg.getFtpPort());
    logger.info("连接到ftp服务器:" + ftpCfg.getFtpIp() + " 成功,开始登录....");
    ftp.login(ftpCfg.getFtpName(), ftpCfg.getFtpPassword());
    int reply = ftp.getReplyCode();
    if (!FTPReply.isPositiveCompletion(reply)) {
        ftp.disconnect();
        logger.debug("登录FTP服务器失败!");
        throw new Exception("登录FTP服务器失败!");
    }
    return true;
}

/* *
* 关闭FTP连接*/

public static void close() throws Exception {
    if (!ftp.isConnected()) {
        return;
    }
    try {
        ftp.logout();
    } catch (IOException e) {
        throw new Exception("退出FTP服务器失败!");
    } finally {
        if (ftp.isConnected()) {
            ftp.disconnect();
        }
    }
}

public static boolean upload(String localDirectoryAndFileName) throws Exception {

    if (!ftp.isConnected()) {
        return false;
    }
    boolean flag = false;
    if (ftp != null) {
        File srcFile = new File(localDirectoryAndFileName);
        String ftpFileName = srcFile.getName();
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(srcFile);

            // 设置上传路径
            String path = ftpCfg.getFtpHostPath();
            // 检查上传路径是否存在 如果不存在返回false
            boolean flag1 = ftp.changeWorkingDirectory(path);
            if (!flag1) {
                // 创建上传的路径
                ftp.makeDirectory(path);
            }
            // 指定上传路径
            ftp.changeWorkingDirectory(path);
            // 设置文件类型
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.enterLocalPassiveMode();
            // 上传
            flag = ftp.storeFile(new String(ftpFileName.getBytes(), "utf-8"), fis);
        } catch (Exception e) {
            FtpUtil.close();
            logger.error("上传失败", e);
            return false;
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                logger.error("IO错误", e);
            }
        }
    }
    logger.info("上传的本地文件全路径: " + localDirectoryAndFileName);
    return flag;
}

}

FtpConfig是配置文件对应建立的实体.

方法贴上:

import com.htsc.zggz.business.FtpUploadService;
import com.htsc.zggz.business.Result;
import com.htsc.zggz.config.FtpConfig;
import com.htsc.zggz.dao.FtpUploadDao;
import com.htsc.zggz.util.FileUtil;
import com.htsc.zggz.util.FtpUtil;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.
;

import static com.htsc.zggz.util.FtpUtil.close;

@Service
public class FtpUploadServiceImpl implements FtpUploadService {

private final Logger logger = LoggerFactory
        .getLogger(PushDataHandlerImpl.class);
@Autowired
private FtpUploadDao ftpUploadDao;
@Autowired
private FtpConfig ftpConfig;

private String localDirectoryAndFileName;
private static final String TEMP_DIR = "targetFile";

/**
 * 文件上传FTP服务器
 *
 * @return
 */
public Result FtpUpload() {
    FTPClient ftp = new FTPClient();
    FtpUtil ftpUtil = new FtpUtil(ftpConfig);
    try {
        WriteIntoExcel();
    } catch (Exception e) {
        logger.error("创建本地excel文件失败", e);
        return new Result(Result.StateCodes.ERROR, "写入excel失败");
    }
    boolean flag = false;
    //登录失败
    try {
        flag = FtpUtil.open();
    } catch (Exception e) {
        logger.error("登录失败错误信息", e);
        return new Result(Result.StateCodes.ERROR, "登录失败");
    }
    //登录成功
    boolean upload;
    if (flag) {
        try {
            upload = FtpUtil.upload(localDirectoryAndFileName);

            if (!upload) {
                logger.info("执行上传语句返回false,上传失败");
                return new Result(Result.StateCodes.ERROR, "上传失败");
            }

        } catch (Exception e) {
            logger.error("上传文件失败", e);
            return new Result(Result.StateCodes.ERROR, "上传失败");

        } finally {

            try {
                close();
               // FileUtil.deletefile(localDirectoryAndFileName);
            } catch (Exception e) {
                logger.error("FTP服务器退出失败", e);
            }

        }
        logger.info("上传 " + ftpConfig.getFtpIp() + " :" + ftpConfig.getFtpHostPath() + " 结束");


    }
    return new Result(Result.StateCodes.SUCCESS, "上传成功");
}

/**
 * 生成文件名和唯一UUID
 *
 * @return
 */

public String getFileNamePrefix() {

    String DATE_LEFT_PARENT = "{";
    String DATE_RIGHT_PARENT = "}";
    String DATE_SPLIT_CHAR = "_";
    String DATE_PARENT = "_YYYYMMDD_";
    String STRING_UUID = "UUID";
    //计算当前日期,生成UUID
    SimpleDateFormat df = new SimpleDateFormat("YYYYMMDD");
    String format = df.format(System.currentTimeMillis());
    String uuid = UUID.randomUUID().toString().replaceAll("-", "");
    String fileNamePrefix = ftpConfig.getFileNamePrefix();
    String prefixName = fileNamePrefix.replace(DATE_LEFT_PARENT, DATE_SPLIT_CHAR)
            .replace(DATE_RIGHT_PARENT, DATE_SPLIT_CHAR);
    fileNamePrefix = prefixName.replaceAll(DATE_PARENT, format).replaceAll(STRING_UUID, uuid);


    return fileNamePrefix;
}

/**
 * 生成excel表格并插入数据
 */
public void WriteIntoExcel() throws Exception {
    File dir = FileUtil.getNewNameFile(TEMP_DIR);
    while (!dir.exists()) {
        dir.mkdirs();
}
    FileOutputStream output = null;
    try {
        HSSFWorkbook wb = new HSSFWorkbook();
        //建立新的sheet对象(excel的表单)
        HSSFSheet sheet = wb.createSheet();
        //在sheet里创建第一行
        HSSFRow row1 = sheet.createRow(0);
        //创建单元格
        HSSFCell cell = row1.createCell(0);
        //设置缺省列高
        sheet.setDefaultRowHeightInPoints(25);
        //设置缺省列宽
        sheet.setDefaultColumnWidth(20);
        //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
        //在sheet里创建第二行
        HSSFRow row2 = sheet.createRow(1);
        //创建单元格并设置单元格内容
        row2.createCell(0).setCellValue("名称");
        row2.createCell(1).setCellValue("组合名称");
        row2.createCell(2).setCellValue("市场");
        row2.createCell(3).setCellValue("代码");
        row2.createCell(9).setCellValue("类型");
        row2.createCell(10).setCellValue("数量");
        row2.createCell(12).setCellValue("日期");

        List<Map<String, Object>> list = ftpUploadDao.seach();
        for (int i = 0; i < list.size(); i++) {
            Map<String, Object> objectMap = list.get(i);
            //在sheet里循环创建 多行
            HSSFRow row = sheet.createRow(i + 2);
            //对应行的列里面循环塞值
            //基金名称
            row.createCell(0).setCellValue((String) objectMap.get("名称"));
            //投资组合名称
            row.createCell(1).setCellValue((String) objectMap.get("组合名称"));
            //市场
            row.createCell(2).setCellValue((String) objectMap.get("市场"));
            //证券代码
            row.createCell(3).setCellValue((String) objectMap.get("代码"));
            //业务类型
            row.createCell(9).setCellValue((String) objectMap.get("类型"));
            //发生数量
            row.createCell(10).setCellValue(String.valueOf((BigDecimal) objectMap.get("数量")));
            //操作生效日期
            row.createCell(12).setCellValue((String) objectMap.get("日期"));
        }
        localDirectoryAndFileName = TEMP_DIR + File.separator + getFileNamePrefix();
        File outPutFile = new File(localDirectoryAndFileName);
        outPutFile.createNewFile();
        output = new FileOutputStream(outPutFile);

        wb.write(output);


    } catch (Exception e) {
        logger.error("excel写入失败", e);
        throw new Exception("excel写入失败");
    } finally {
        try {
            output.close();
        } catch (Exception e) {
            logger.error("IO错误", e);
        }
    }

}

}
问题:
本地文件上传FTP服务器,本地建了FTP服务器,可上传,连接别人的本地FTP服务器也能上传,测试环境返回成功,但是却生成不了文件.也不报错.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值