附件相关 - 获取附件对象

package com.landray.kmss.xp.util;

import com.landray.kmss.sys.attachment.model.SysAttMain;
import com.landray.kmss.sys.attachment.service.ISysAttMainCoreInnerService;
import com.landray.kmss.util.SpringBeanUtil;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 附件相关工具类
 * @author liquid
 */
public class XpAttUtil {
    private static ISysAttMainCoreInnerService sysAttMainService;

    public static ISysAttMainCoreInnerService getSysAttMainService() {
        if (sysAttMainService == null) {
            sysAttMainService = (ISysAttMainCoreInnerService)SpringBeanUtil.getBean("sysAttMainService");
        }
        return sysAttMainService;
    }

    /**
     * 获取附件文件流对象
     * @author liquid
     * @date 2022年11月7日
     * @param attId 附件ID
     * @return 文件流对象
     */
    public static InputStream getAttInputStream(String attId) throws Exception {
        ISysAttMainCoreInnerService sysAttMainService = getSysAttMainService();
        return sysAttMainService.getInputStream(attId);
    }

    /**
     * 获取附件File对象(非直接操作附件对象)
     * 若需获取附件的文件流:InputStream in = sysAttMainService.getInputStream(attId)
     * @author liquid
     * @date 2022年11月4日
     * @param attId 附件ID
     * @return 附件
     */
    public static File getAttFileById(String attId) {
        ISysAttMainCoreInnerService sysAttMainService = getSysAttMainService();
        File tempFile = null;
        byte[] buffer;
        OutputStream out;
        try (InputStream in = sysAttMainService.getInputStream(attId)){
            // 附件信息对象
            SysAttMain sysAttMain = (SysAttMain) sysAttMainService.findByPrimaryKey(attId);
            String fileName = sysAttMain.getFdFileName();
            buffer = new byte[in.available()];
            in.read(buffer);
            tempFile = File.createTempFile(fileName.substring(0, fileName.indexOf(".")), fileName.substring(fileName.lastIndexOf(".")));
            out = new FileOutputStream(tempFile);
            out.write(buffer);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        assert tempFile != null;
        return tempFile;
    }

    /**
     * 获取附件File对象列表(非直接操作附件对象)
     * @author liquid
     * @date 2022年11月4日
     * @param attIdList 附件ID列表
     * @return 附件文件对象列表
     */
    public static List<File> getAttFilesByIdList(List<String> attIdList) {
        List<File> attFileList = new ArrayList<>();
        attIdList.forEach(attId -> {
            attFileList.add(getAttFileById(attId));
        });
        return attFileList;
    }

    /**
     * 传入模型实例Id,获取该实例下全部的附件
     * @author liquid
     * @date 2022年11月7日
     * @param modelName 对应表单模型的全限定名;例如:
     *                  [流程表单模型]全限定名为:KmReviewMain.class.getName()
     *                  [低代码简单表单]全限定名为:ModelingAppSimpleMain.class.getName()
     *                  若不清楚对应的模型名,可查数据库表sys_att_main的fd_model_name列
     * @param modelId 模型实例Id
     * @return 附件文件对象列表
     */
    public static List<File> getAttFilesByModelId(String modelName, String modelId) {
        ISysAttMainCoreInnerService sysAttMainService = getSysAttMainService();
        List<File> fileList = new ArrayList<>();
        List<?> attMainList = null;
        try {
            attMainList = sysAttMainService.findAttListByModel(modelName, modelId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        assert attMainList != null;
        attMainList.parallelStream().forEach(attMain -> {
            String attId = ((SysAttMain)attMain).getFdId();
            System.out.println(attId);
            File file = getAttFileById(attId);
            fileList.add(file);
        });
        return fileList;
    }

    /**
     * 获取附件下载链接列表(无权限管控)
     * @author liquid
     * @date 2023年3月4日
     * @param attIdList 附件ID列表
     * @return 下载链接列表(若传入的id对应附件不存在,则其下载链接为空串)
     */
    public static List<String> getAttDownLoadUrl(List<String> attIdList) {
        ISysAttMainCoreInnerService sysAttMainCoreInnerService = getSysAttMainService();
        List<String> downLoadUrlList = new ArrayList<>();
        for (String attId : attIdList) {
            try {
                String downloadUrl = sysAttMainCoreInnerService.getRestDownloadUrl(attId);
                downLoadUrlList.add(downloadUrl == null ? "" : downloadUrl);
            } catch (Exception e) {
                System.out.println("附件不存在:" + attId);
            }
        }
        return downLoadUrlList;
    }
}

其它可能有用的信息:

ISysAttMainCoreInnerService sysAttMainService = (ISysAttMainCoreInnerService)SpringBeanUtil.getBean("sysAttMainService");

attId是附件ID(可通过联表sys_att_main和相关表查询出来,其中sys_att_main对应的模型为SysAttMain,存放系统中所有附件的信息)

1)SysAttFile attFile2 = sysAttMainService.getFile(attId);

其中fdFilePath是资源路径的相对位置(win中/为C:\landray\kmss\resource,linux中是/ekpdata)

2)SysAttMain sysAttMain = (SysAttMain) sysAttMainService.findByPrimaryKey(attId);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liquid-Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值