1.当单视频文件下载时:
public void down(OutJyInfoDto dto, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
// 文件路径
String surl = “”;
// 文件后缀名
String exe = “”;
String fileName = 文件名称+后缀;
String encodedFilename = URLEncoder.encode(fileName, "UTF-8");
try {
response.setContentType("application/octet-stream");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename");
response.setHeader("Content-Disposition", "attachment;filename=\"" + encodedFilename + "\"");
// 将文件内容写入到响应输出流中
InputStream in = new URL(surl).openStream();
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[4096];
int len = -1;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.close();
out.flush();
out.close();
} catch (Exception e) {
log.error("下载错误:" + e.getMessage());
}
}
// 下载zip文件
// 设置响应头,告诉浏览器要下载Zip压缩包,并指定文件名
response.setContentType("application/zip");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename");
response.setHeader("Content-Disposition", "attachment; filename=" + fileInfoDto.getJylsh() + ".zip");
// 多条视频时,为打包下载
// 创建Zip输出流,用于将多个文件压缩成一个Zip压缩包
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
for (OutJyInfoDto dto : videoUrlList) {
String surl = dto.getSpurl();
String exe = surl.substring(surl.lastIndexOf("."));
String fileName = dto.getJylsh() + "_" + dto.getHpalmz() + "_" + dto.getTdbh() + "_" + dto.getCs() + exe;
// 创建Zip条目,用于表示一个压缩文件
ZipEntry zipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(zipEntry);
// 将文件内容写入到Zip输出流中
IOUtils.copy(new URL(surl).openStream(), zipOut);
// 关闭Zip条目
zipOut.closeEntry();
}
// 关闭Zip输出流
zipOut.finish();