当前位置:网站首页>批量下载文件----压缩后再下载
批量下载文件----压缩后再下载
2022-04-23 03:17:00 【数学教师写BUG】
把所需要的的附件全部下载下来放在指定的位置,然后对此位置上的附件全部打包成压缩文件,然后再下载下来。方便用户查看。
public IZrarResponse downloadZdxjr(IZrarRequest req) throws ParseException, ParseException, IOException {
IZrarResponse res = new ZrarResponse();
List list = "具体的获取数据的方法---需要根据项目需求写";
String oid = "";//这三个是项目所需要的值
String wjmc = "";
String unitname = "";
String url = null;
JsonResult<FileObject> result = new JsonResult();
//从系统配置文件获取路径位置
String realPath0 = PropertyManager.getProperty("CommonUploadFileUrl", new String[0]);
String realPath = realPath0.replace("\\", "/");
if (realPath.lastIndexOf("/") == realPath.length() - 1) {
realPath = realPath + "ssfa/";
} else {
realPath = realPath + "/ssfa/";
}
//要是文件路径已存在则删除再新建
File f = new File(realPath);
if (f.exists()) {
FileUtils.deleteDirectory(f);
f.mkdirs();
} else {
f.mkdirs();
}
for (int i = 0; i < list.size(); i++) {
Map map = (Map) list.get(i);
oid = (String) map.get("oid");
wjmc = (String) map.get("wjmc");
unitname = (String) map.get("unitname");
if (StringUtil.isNull(oid)) {
result.setErrorMsg("oid can not be null");
return res.addResHtml(result.toJson());
}
HttpServletRequest request = req.getHttpServletRequest();
//获取地址请求下载附件
url = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/oss/download/" + oid + "?direct=1";
//获取附件信息
getFile(url, "(" + unitname + ")" + wjmc, realPath);
}
String currentTime = DateUtils.getCurrentTime();
currentTime = currentTime.replaceAll("-", "").replaceAll(" ", "").replaceAll(":", "");
//压缩文件
compressToZip(realPath, realPath0, "实施方案" + currentTime + ".zip");
//下载压缩后的文件
res.addStream(new File(realPath0 + "实施方案" + currentTime + ".zip"));
return res;
}
/**
* @Description : 获取附件文件 并写入指定位置
* @Author:
* @Date: 2022/4/22 15:42
*/
private boolean getFile(String urlstr, String filename, String filepath) {
InputStream in = null;
HttpURLConnection conn = null;
FileOutputStream os = null;
try {
URL url = new URL(urlstr);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setConnectTimeout(5000);
conn.setReadTimeout(60000);
in = conn.getInputStream();
os = new FileOutputStream(filepath + filename);
byte[] buf = new byte[8 * 1024];
int len;
while ((len = in.read(buf)) != -1) {
os.write(buf, 0, len);
}
os.flush();
if (os instanceof FileOutputStream) {
((FileOutputStream) os).getFD().sync();
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
}
}
if (null != conn) {
conn.disconnect();
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
}
}
}
}
/**
* @param sourceFilePath 源文件路径
* @param zipFilePath 压缩后文件存储路径
* @param zipFilename 压缩文件名
* @Description :压缩文件
* @Author:
* @Date: 2022/4/22 15:48
*/
public static void compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {
File sourceFile = new File(sourceFilePath);
File zipPath = new File(zipFilePath);
if (!zipPath.exists()) {
zipPath.mkdirs();
}
File zipFile = new File(zipPath + File.separator + zipFilename);
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
writeZip(sourceFile, "", zos);
// 文件压缩完成后,删除被压缩文件
// boolean flag = deleteDir(sourceFile);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
/**
* @param file 源文件目录
* @param parentPath 压缩文件目录
* @param zos 文件流
* @Description : 遍历所有文件,压缩
* @Author:
* @Date: 2022/4/22 15:49
*/
public static void writeZip(File file, String parentPath, ZipOutputStream zos) {
if (file.isDirectory()) {
// 目录
parentPath += file.getName() + File.separator;
File[] files = file.listFiles();
for (File f : files) {
writeZip(f, parentPath, zos);
}
} else {
// 文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
// 指定zip文件夹
ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
zos.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
zos.write(buffer, 0, len);
zos.flush();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
}
版权声明
本文为[数学教师写BUG]所创,转载请带上原文链接,感谢
https://blog.csdn.net/u011271164/article/details/124348505
边栏推荐
- C syntax sugar empty merge operator [?] And null merge assignment operator [? =]
- MySQL之explain关键字详解
- Xutils3 corrected a bug I reported. Happy
- 队列的存储和循环队列
- A set of combination boxing to create an idea eye protection scheme
- 可以接收多种数据类型参数——可变参数
- JS implementation of new
- poi根据数据创建导出excel
- Recommend reading | share the trader's book list and ask famous experts for trading advice. The trading is wonderful
- 再战leetcode (290.单词规律)
猜你喜欢
![[mock data] fastmock dynamically returns the mock content according to the incoming parameters](/img/1e/c4aad49d16fb21a19865ba75128e43.png)
[mock data] fastmock dynamically returns the mock content according to the incoming parameters

Configure automatic implementation of curd projects

Is it difficult to choose binary version control tools? After reading this article, you will find the answer

Blazor University (12) - component lifecycle

The most detailed in the whole network, software testing measurement, how to optimize software testing cost and improve efficiency --- hot

Tencent video VIP member, weekly card special price of 9 yuan! Tencent official direct charging, members take effect immediately!

超好用的【通用Excel导入功能】

2022a special equipment related management (elevator) work license question bank and simulation examination
![General testing technology [1] classification of testing](/img/f1/d80b6793b6443cbc4048d7e6319f51.png)
General testing technology [1] classification of testing

12. < tag linked list and common test site synthesis > - lt.234 palindrome linked list
随机推荐
IDEA查看历史记录【文件历史和项目历史】
2022 Shandong Province safety officer C certificate work certificate question bank and online simulation examination
C language to achieve address book - (static version)
Yes Redis using distributed cache in NE6 webapi
Blazor University (12) - component lifecycle
Using positive and negative traversal to solve the problem of "the shortest distance of characters"
类似Jira的十大项目管理软件
PID debugging of coding motor (speed loop | position loop | follow)
C WPF UI framework mahapps switching theme
2022山东省安全员C证上岗证题库及在线模拟考试
再战leetcode (290.单词规律)
2022年做跨境电商五大技巧小分享
OLED multi-level menu record
搭建XAMPP时mysql端口被占用
数据库表中不建索引,在插入数据时,通过sql语句防止重复添加(转载)
【无标题】
Fiddler use
《C语言程序设计》(谭浩强第五版) 第7章 用函数实现模块化程序设计 习题解析与答案
IOTOS物联中台对接海康安防平台(iSecure Center)门禁系统
Ide-idea-problem