历史版本23 :自定义上传文件至磁盘 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

在定时任务完成之后,有时候需要将文件导出至自定义位置,而不是系统默认位置%FR%WebReport\WEB-INF\schedule,这时候就可以通过自定义附件来处理,通过自定义类文件修改文件导出的位置。

2. 示例编辑

导出 Excel 和 PDF,并把生成的对应文件保存在指定路径中去,本例中的路径是放在 C 盘 test 文件夹下。

3. 实现步骤编辑

3.1 编写类文件

定义一个 OutputExcel 类文件,实现 OutputActionHandler<OutputClass> 接口,具体代码如下:

package com.fr.output;
import com.fr.io.utils.ResourceIOUtils;
import com.fr.schedule.base.bean.output.OutputClass;
import com.fr.schedule.base.constant.ScheduleConstants;
import com.fr.schedule.feature.output.OutputActionHandler;
import com.fr.stable.ArrayUtils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
/**
 * Created by Zed on 2018/9/11.
 */
public class OutputExcel extends OutputActionHandler<OutputClass> {
    @Override
    public void doAction(OutputClass action, Map<String, Object> map) throws Exception {
        String[] files = (String[]) map.get(ScheduleConstants.OUTPUT_FILES);
        if (ArrayUtils.isNotEmpty(files)) {
            for (String path : files) {
                output(path);
            }
        }
    }
    private void output(String path) {
        String realPath = ResourceIOUtils.getRealPath(path);
        File file = new File(realPath);
        String newPath = "C:/test/" + file.getName();
        BufferedInputStream in = null;
        OutputStream out = null;
        try {
            out = new BufferedOutputStream(new FileOutputStream(new File(newPath)));
            in = new BufferedInputStream(new FileInputStream(realPath));
            byte[] ba = new byte[in.available()];
            in.read(ba);
            out.write(ba);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

编译类文件,将生成的 OutputExcel.class 放在%FineReport_home%\webapps\webroot\WEB-INF\classes\com\fr\output文件夹下。

注:类文件放的位置只需要与编写类文件里面的 package 位置对应即可。

3.2 定时任务

参照 定时生成日报 配置定时任务,到第三步—本地文件的时候,在附件存档类型后面勾选 excel,word,pdf,则可将定时任务结果导出为 excel,word 以及 pdf格式如下图:

222

然后到第四步——文件处理的时候,勾选“自定义附件处理”,切换到自定义附件处理标签页,选择上面的class文件,点击提交即可,如下图:

222

3.3 效果查看

在 C 盘 test 文件夹下面可以查看到不同格式的导出文件,如下图:

222