一,下载文件到本地
二,打包文件夹,压缩成ZIP文件,放入本地
三,文件流返回,并删除所有下载的本地文件
注意事项:
1,这是先把文件保存到本地,再进行压缩文件夹,最后删除本地文件夹的方式
2,保存的地址跟生成zip文件的地址不能一致,可以保存平级,比如:"D://download/图片/"这个地址存放下载的图片,"D://download/test.zip" 这个保存压缩的zip文件,删除时的地址是 zip完整路径("D://download/test.zip")和下载路径("D://download/图片/")。
3,如果不需要下载,就不用调用uploadURL()方法,如果地址有中文,必须先做转码。
4,注意文件地址 斜杠与反斜杠问题
网上也找了很多,最终选择了这种比较简单的方式,记录一下
后续找时间改成 文件流传输方式
1,下载图片(图片包含中文),图片保存在 localPath 目录下
调用保存图片方法:
Map<String, List<JSONObject>> imageList = productService.getProductMediasList(shopId, articleNos); url = "D://download/图片"; // 下载文件到本地 ZipUtils zipUtils = new ZipUtils(); for (Map.Entry<String, List<JSONObject>> entry : imageList.entrySet()){ String localPath = url + separator + entry.getKey(); entry.getValue().stream().forEach(x -> { zipUtils.uploadURL(x.getString("path"), localPath, new File(x.getString("path")).getName()); }); }
保存图片的实现方式:
/** * 下载资源到本地 * @param fileUrl 文件地址 * @param localPath 保存路径 */ public void uploadURL(String fileUrl, String localPath, String fileName){ // 中文链接转码 fileUrl = FileUtils.cnToEncode(fileUrl); HttpURLConnection connection = null; DataInputStream in = null; try { URL url = new URL(fileUrl);/*将网络资源地址传给,即赋值给url*/ /*此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流*/ connection = (HttpURLConnection)url.openConnection(); in =