定时将报表进行ftp文件上传

一、业务逻辑:

       系统每天生成多张报表(帆软),但是帆软报表存在改了模板后,以往内容也同步修改,用户无法重现以前报表的问题,目前只想到两种解决办法,①修改的每一版报表模板均存档,前端根据日期调用不同的报表模板,进行展示;②将每天生成的报表结果,excel以及pdf进行ftp文件上传,存入系统服务器上,然后新增历史报表查询页面供用户进行pdf预览、打印,以及excel下载。

鉴于现在处于上线初期,用户对报表的设计和取数逻辑均存在偶尔的修改状态,且报表有30多张,为避免未来出现大量报表模板,且前端需要对应做出修改的情况,我们选择第二种实现方法。

二、操作实现:

仅用pdf版举例,excel同理。

1、在配置文件里面先配置文件上传路径,地址会自带,我们服务器是linux的。

#linux文件上传本地目录配置
XXXX.file.uploadLinuxFolder=/nfs/XXXX/XXXXXX/upload/

2、获取文件路径的方法

public static String getLocalDir(FileProperties fileProperties){

        String operate = System.getProperty("os.name");
        //只举例linux系统
        if (operate.startsWith("Linux")) {
                return fileProperties.getUploadLinuxFolder();
        }
}

3、正式开始

//获取文件上传地址
    String adders= FolderUtil.getLocalDir(this.fileProperties);
//引入帆软报表地址,参数为报表名、报表日期
    String url = "http://XXXXXXXXXXXXXX"+URLEncoder.encode(fileName, "utf-8") +".cpt" +"&format=pdf&extype=simple"+"&date=" + reportDate;
//文件输入流
    InputStream inputStream = null;

    URL httpUrl = new URL(url);
    conn = (HttpURLConnection) httpUrl.openConnection();
    conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)");          
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setUseCaches(false);
    conn.connect();
    inputStream = conn.getInputStream(); //得到输入流

//指定文件地址和名称
    String newfileName = adders+ "XXXX/pdfXXXX/" + fileName + reportDate+ ".pdf";
//文件输出流
    FileOutputStream fos = new FileOutputStream(newfileName, false);
//写入
    byte[] b = new byte[1024];
    int length;
    while ((length = inputStream.read(b)) > 0) {
            fos.write(b, 0, length);
    }
//关闭文件流
    inputStream.close();
    fos.close();

4、调用方法

XXXXExport.savePdf("生产日报", "2023-01-03", localDir);

三、讨论:

        有没有更合适的方法解决这个问题~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值