方案一:通过从图片服务器下载到本地(本地测试即为windows路径;测试环境测试即为linux路径),再生成压缩包
拼接文件名:
@Value("${tmpFilePath.pic}")
private String tmpfile;
tmpfile+File.separator+StringUtils.substringAfterLast(url, “/”); // url为图片的网络路径
org.apache.commons.lang3.StringUtils#substringAfterLast
方案二:通过从图片服务器下载到内存中(通过hashmap保存:key-文件名,value-下载下来的图片的二进制)
byte[] bytes = IOUtils.toByteArray(inputStream);
org.apache.commons.io.IOUtils#toByteArray(java.io.InputStream)
关键点:
压缩包中生成文件夹:
ZipEntry zipEntry = new ZipEntry(fileName);
zos.putNextEntry(zipEntry);
import cn.hutool.core.io.IoUtil;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
方案一:
/**
* 下载
* @param urls 下载图片地址集合
* @param linkedUrls key-姓名 value-图片文件名
* @param response
*/
private void download(List<String> urls, Map<String, List<String>> linkedUrls, HttpServletResponse response) {
// 要打包的文件列表
List<File> fileList = new ArrayList<>();
try {
for (int i = 0; i < urls.size(); i++) {
if (i == 0) {
FileDownloadUtil.delFile(tmpfile);
}
String url = urls.get(i);
String filename = StringUtils.substringAfterLast(url, "/");
String localPath = tmpfile + File.separator + filename;
//下载网络文件到临时文件目录
FileDownloadUtil.download(url, localPath);
File srcFile = new File(localPath);
fileList.add(srcFile);
}
//生成ZIP压缩包
FileDownloadUtil.downloadZip(fileList, linkedUrls, response);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载网络文件到本地
*
* @param urlString
* @param fileAllName
* @throws Exception
*/
public static void download(String urlString, String fileAllName) throws Exception {
if (StringUtils.isEmpty(urlString)) {
return;
}
URL url;
FileOutputStream fileOutputStream = null;
InputStream inputStream = null;
try {
url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection)