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); }