天翎MyApps技术社区 - 低代码平台 | 流程管理系统 | BPM软件

 找回密码
 注册成为天翎用户
查看: 1465|回复: 6

[已解决] 通过附件上传控件上传的附件可以批量下载吗?

[复制链接]
Wendy 发表于 2023-5-12 14:06:31 | 显示全部楼层 |阅读模式
【myApps/OBPM版本号】:v4.4- sp XX
【浏览器类型】:Chrome/其他
【联系方式-QQ】:请留下您的QQ号码
【联系电话】:    请留下您的联系电话,以便技术同事更好解决您的问题
【问题描述】:
想实现一个功能,用户通过表单里的附件上传控件上传附件,管理员可通过按钮一键将这些附件批量下载下来?请问这个功能可以写脚本实现吗?









1、问题描述最好图文并茂,如有视频/脚本可直接放出,这样技术同事在处理该问题时效率更加高效哦~
2、如果该问题已得到解决,请在该帖子下回复\"已解决可结帖\"
 楼主| Wendy 发表于 2023-5-17 11:54:51 | 显示全部楼层
//先在表单放一个文件下载按钮,下列脚本写在文件下载路径里,已测试4.4版本可以正常批量下载以及(除第一份复制文件无法删除外其余均可删除)

(function(){
        var ZipUtil = new Packages.cn.myapps.util.file.ZipUtil();
        var FileUtil = new Packages.cn.myapps.util.file.FileUtil();
        var JSONArray = new Packages.net.sf.json.JSONArray();
        var fileString = getItemValueAsString("stamp_document");//文件上传的控件名称
        var fileArr = JSONArray.fromObject(fileString);
        var rootPath = new Packages.cn.myapps.util.property.PropertyUtil().getPath();//获取根目录

        var files = [];//压缩文件集合
        var destFolder = rootPath + "/uploads/zipFile";//压缩文件目录
        var copyFolder = destFolder + "/copyFile";//复制文件目录
        var folders = new Packages.java.io.File(copyFolder);//java io流
                if(!folders.exists()){
                        folders.mkdirs();//mkdirs()创建文件夹
                        }
        var index = 1;//重名记录次数
        for (var iterator = fileArr.iterator(); iterator.hasNext();) {
      var file = iterator.next();      
      var path =  rootPath + file.getString("path");  
       var name = file.getString("name");
      var fileType = name.substring(name.lastIndexOf("."));
      var newPath = copyFolder + "/" + name;    //复制的文件路径(把id文件名转成对应的文件名)
                if (new Packages.java.io.File(newPath).exists()) {
                         newPath = copyFolder + "/" + name.replace(fileType, index + fileType);
                        index++;
                                        }
      FileUtil.copyFile(newPath, path);
      files.push(newPath);//将文件路径存进数组
    }
      var zipName = "盖章资料";//压缩文件名
      ZipUtil.compressFiles(zipName, files, destFolder);       
        var VirtualFileSystemUtils = new Packages.cn.myapps.runtime.common.utils.fs.VirtualFileSystemUtils();
for (var i = 1; i < files.length; i++) {//因java.io流的问题,会出现第一个复制的文件删除不掉,因此数组索引从1开始删除,每次打包的zip文件会遗留第一个无法删除,测试时在表单的计算脚本可以全部删除文件(因此剩余文件问题另外写计算脚本定时删除)
   VirtualFileSystemUtils.deleteFile(files[i].replace("\\","/"));
}
                                 //文件下载路径
         var downloacUrl = "/uploads/zipFile/" + zipName + ".zip";
         return downloacUrl;

})()
lillian828 发表于 2023-5-18 06:43:53 | 显示全部楼层
您好,请问解决了吗?
 楼主| Wendy 发表于 2023-5-18 08:38:04 | 显示全部楼层
lillian828 发表于 2023-5-18 06:43
您好,请问解决了吗?

脚本已实现批量下载功能,就是删除复制去服务器的文件时,第一个复制的文件删除不了,剩余的文件可以删除
lillian828 发表于 2023-5-22 19:25:01 | 显示全部楼层
您好,请问tomcat有报错吗?
 楼主| Wendy 发表于 2023-6-2 11:18:19 | 显示全部楼层
lillian828 发表于 2023-5-22 19:25
您好,请问tomcat有报错吗?

你好,后面找出来问题是java io流没有关闭导致的文件被占用,于是删除不了,属于你们底层源代码的问题
lillian828 发表于 2023-6-6 18:41:40 | 显示全部楼层

好的,有问题请继续发贴。

本版积分规则

QQ|手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-12 16:40

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表