oss打包下载
private static final String OSS_ENDPOINT = PropertiesUtil.getString("oss.endpoint");
private static final String OSS_ACCESS_KEY = PropertiesUtil.getString("oss.access.key");
private static final String OSS_SECRET = PropertiesUtil.getString("oss.secret");
private static final String OSS_BUCKET_NAME = PropertiesUtil.getString("oss.bucket.name");
// private static final String OSS_CT_BUCKET_NAME =
// PropertiesUtil.getString("oss.bucket.ct.name");
private static final OSSClient OSS_CLIENT = new OSSClient(OSS_ENDPOINT, OSS_ACCESS_KEY, OSS_SECRET);
/**
* 批量下载oss 文件 并打成zip 包 返回到response中
*
* @param fileNames
* oss上的文件名集合 如:product/image/3448275920.png * @param zipFileName
* 压缩包文件名
* @param response
* HttpServletResponse
*/
public static void batchDownLoadOssFile(List<String> fileNames, String zipFileName, HttpServletResponse response) {
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
//要下载成什么类型的文件,这里直接加后缀
response.setHeader("Content-Disposition", "attachment;fileName=" + zipFileName + ".zip");
BufferedInputStream bis = null;
try {
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
for (String fileName : fileNames) {
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(OSS_BUCKET_NAME, fileName,
HttpMethod.GET);
// 设置过期时间。
request.setExpiration(expiration);
// request.setContentType("application/pdf");
// 生成签名URL(HTTP GET请求)。
URL signedUrl = OSS_CLIENT.generatePresignedUrl(request);
// 使用签名URL发送请求。
OSSObject ossObject = OSS_CLIENT.getObject(signedUrl, new HashMap<>());
if (ossObject != null) {
InputStream inputStream = ossObject.getObjectContent();
byte[] buffs = new byte[1024 * 10];
String zipFile = fileName.substring(fileName.lastIndexOf("/") + 1)+".pdf";
ZipEntry zipEntry = new ZipEntry(zipFile);
zos.putNextEntry(zipEntry);
bis = new BufferedInputStream(inputStream, 1024 * 10);
int read;
while ((read = bis.read(buffs, 0, 1024 * 10)) != -1) {
zos.write(buffs, 0, read);
}
ossObject.close();
}
}
zos.close();
//关闭流
IOUtil.close(bis);
} catch (Exception e) {
LOGGER.error("打包下载发生异常:",e);
} finally {
// 关闭流
try {
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
springboot框架,前端加一个接口
@GetMapping(value = "/downloadBookZip")
public void downloadBookZip(HttpServletRequest request,HttpServletResponse response) {
String subjectIdstr = request.getParameter("subjectId");
String className = request.getParameter("className");
String studentNum = request.getParameter("studentNum");
if(Strings.isNullOrEmpty(subjectIdstr)) {
throw new BusinessException(BusinessExceptionEnum.PARAM_ERROR, "必须有科目ID");
}
Long subjectId = Long.parseLong(subjectIdstr);
//查询生成文件路径
List<String> list = wrongTopicDao.queryWrongTopicOssKey(subjectId,className,studentNum);
//上面按照个人业务查询自己的文件key即可
OssUtil.batchDownLoadOssFile(list, "books", response);
}
oss打包下载的更多相关文章
- ASP.NET五步打包下载Zip文件
本文版权归博客园和作者吴双共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 首先分享几个振奋人心的新闻: 1.谷歌已经宣布加入.NET基金会 2.微软加入Linux基金会, ...
- 射手网字幕打包下载(73.16G)
射手网陪着我度过15年了. 我所希望射手网所具有的价值,就是能令更多人跨越国家的樊篱,了解世界上不同的文化. 如果这个网站有帮到人,我就已经很满足了. 但是,需要射手网的时代已经走开了. 因此,今天, ...
- 2014年最新720多套Android源码2.0GB免费一次性打包下载
之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ...
- ASP.NET 打包下载文件
使用的类库为:ICSharpCode.SharpZipLib.dll 一种是打包整个文件夹,另一种是打包指定的多个文件,大同小异: using ICSharpCode.SharpZipLib.Zip; ...
- C#.NET快速开发框架-企业版V4.0截图打包下载
C/S系统开发框架-企业版 V4.0 (Enterprise Edition) http://www.csframework.com/cs-framework-4.0.htm 其它图片打包下载: ht ...
- ASP.NET多文件批量打包下载
在对多文件打包中用到了 DotNetZip 的方法来实现对多文件压缩打包.需要到http://dotnetzip.codeplex.com/处下载该文件,然后引用即可. Default.aspx: & ...
- 开源 & 免费使用 & 打包下载自行部署 :升讯威 周报系统
这个周报系统大约写于2015年,缘起当时所带的开发团队需要逐步建立或完善一些项目管理方法. 在调研了网上的诸多项目管理或周报/日报管理系统之后,并没有找到符合当时情况的系统,这里最大的问题不是网上既有 ...
- java 实现多文件打包下载
jsp页面js代码: function downloadAttached(){ var id = []; id.push(infoid); var options = {}; options.acti ...
- PHP实现zip压缩打包下载
先来看PHP实现文件及文件夹的zip压缩 这里使用PHP扩展的ZipArchive类,在使用之前要将php.ini文件中的zlib.output_compression设置为On 代码如下: publ ...
随机推荐
- 【leetcode_easy_$】577. Employee Bonus
problem 577. Employee Bonus 参考 1. Leetcode_easy_$_577. Employee Bonus; 2. https://www.cnblogs.com/li ...
- 基于MSP430G2231实现多路数据采集器
基于MSP430G2231实现多路数据采集器 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电 ...
- React native 放大点击区域 hitSlop属性的使用
在日常的需求中,如上图的加减按钮,可能写ui布局的时候没考虑实际的这个点击范围太小,不利于真机上用户点击到,如果加包裹层加padding的话又会影响原先定好的布局,或者不利于对齐. 那么可以用 hi ...
- python 在工程中处理相对路径的思考
首先就是 工程中的目录非常多.不能使用绝对路径. 只能使用相对路径. 我工程的目录: root_dir = os.path.dirname(os.path.abspath('.')) ## 获取相对目 ...
- [转帖]如何禁止VirtualBox虚拟机和物理机之间的时间同步
如何禁止VirtualBox虚拟机和物理机之间的时间同步 乐者为王 2014-11-02 706 阅读 http://ju.outofmemory.cn/entry/97301 验证了下 修改注册 ...
- 【51nod】2622 围绕着我们的圆环
[51nod] 2622 围绕着我们的圆环 kcz出的一道比赛题 第一次写带修改的线性基 ps:我觉得我计数计的好麻烦 首先是这个可以认为第二个矩阵是\(q\)个\(s\)位数,如果这\(q\)个数的 ...
- go if 判断 完成随机分数的评级
1 go中 所有的大括号要跟在 当前语句的后面不能换行 例如: if a>0 { func getUser(){ for { 2关于随机分数的生成 种子的设置放到循环中会是重复的数字,这是可以 ...
- java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast
解决方案 在配置文件中配置proxy-target-class="true" <aop:aspectj-autoproxy proxy-target-class=" ...
- css 背景 background
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! background我们一般用到的的属性有: background-attachment:背景(图片)是否 ...
- 奇妙的算法【10】TX--有效号码、最,小耗时、最小差值、差值输出、异或结果
昨晚刚刚写的几道算法题,难度也还行,就是全部AC有些困难,当时第一题AC.第二题AC 60%,第四题AC 40%,第五题没有时间写完了,这个应该全部AC了:其中第三题没有写出来 1,是否存在符合规范的 ...