ASP .NET Core图片批量下载
2021/4/14 12:28:50
本文主要是介绍ASP .NET Core图片批量下载,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
图片的批量下载大概分为三步:
一、循环下载网络图片到服务器。
二、将图片文件夹压缩,并且删除下载的图片。
三、浏览器端使用JavaScript将图片另存为。
下面是后台.net core代码。
1、先将上一次的zip包进行删除,创建服务器存放图片的文件夹目录。
2、轮询图片信息,将图片一张张的下载到创建的文件夹目录中。
3、图片下载完成将文件夹进行压缩,删除之前创建的文件夹目录(这样就I可以把刚刚下载的图片也删除掉)。
//PicTable用于存放需要保存的网络图片地址和本地的文件夹名称 private string OnPostDownLoadAsync(DataTable PicTable) { string returnresult = "{\"code\":\"0\",\"data\":\"\"}"; try { WebClient mywebclient = new WebClient(); //获取网站当前根目录我用replace替换了一下为了防止传到js会转译出错 string sWebRootFolder = AppDomain.CurrentDomain.BaseDirectory.Replace("\\","/"); string folderpath = "WebResources/picturezip/"; string storecode = ""; if (PicTable.Rows.Count>0) {//我们项目是根据每个登陆的人员编号创建的文件夹,防止同一时间一起下载图片导致错误 storecode = PicTable.Rows[0]["folder"].ToString();//图片保存的文件夹 string pdpath = sWebRootFolder + folderpath + storecode+ ".zip"; //保存图片路径 var savePath = string.Format("{0}{1}/", folderpath, storecode); if (System.IO.File.Exists(pdpath)) {//存在压缩包就删除 System.IO.File.Delete(pdpath); } if (!Directory.Exists(sWebRootFolder+savePath)) {//没有文件夹进行创建 Directory.CreateDirectory(sWebRootFolder + savePath); } } foreach (DataRow dr in PicTable.Rows) { string picpath = dr["OTCPIC"].ToString(); string url = picpath; //保存图片路径 var savePath = string.Format("{0}{1}/", folderpath, storecode); //文件名 string filename = System.IO.Path.GetFileName(url); //扩展名 string extension = System.IO.Path.GetExtension(url); savePath = sWebRootFolder + savePath; //下载文件 mywebclient.DownloadFile(url, savePath + filename); } if (!string.IsNullOrEmpty(storecode)) { string zippath = sWebRootFolder + folderpath+ storecode; ZipFile.CreateFromDirectory(zippath , zippath + ".zip"); string returnpath = "/" + folderpath + storecode + ".zip"; returnresult = "{\"code\":\"0\",\"data\":\""+ returnpath + "\"}"; if (Directory.Exists(zippath)) {//删除下载的图片 Directory.Delete(zippath,true); } } else { returnresult = "{\"code\":\"1001\",\"data\":\"图片信息数据不能为空\"}"; } } catch (Exception ex) { returnresult = "{\"code\":\"1002\",\"data\":\""+ ex.Message.Replace("\"", "") + "\"}"; } return returnresult; }
我们项目是根据每个登陆用户下载的图片不一样,所以每个账户在下载时候都创建了一个属于自己的文件夹,将图片下载到该文件夹下,然后将文件夹打包成压缩包。最后将创建的文件夹删除掉(也就是将刚刚下载的图片删除掉),并且将压缩包地址放回到浏览器端。
下面是浏览器端javascript代码,先判断了一下是不是图片下载成功。如果下载成功就下载图片压缩包。
function picdowload(data){ var dataobj=eval("("+data+")"); if(dataobj["code"]=="0"){ var urlhref = window.location.href; var urlhost = window.location.host; var url = urlhref.split(":")[0] + "://" + urlhost + dataobj["data"]; window.open(url); const iframe = document.createElement("iframe"); iframe.style.display = "none"; //防止影响页面 iframe.style.height = 0; //防止影响页面 iframe.src = url; document.body.appendChild(iframe); //这一行必须,iframe挂在到dom树上才会发请求 }else{ alert(dataobj["data"]); } }
在这里使用的iframe标签进行的图片下载。
在批量下载中用到了一个ZipFile类,该类的API说明地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.io.compression.zipfile?view=netcore-3.1
我们项目中需要一个批量下载图片的功能。这就是我设计的图片下载的流程以及我的代码。也希望各位能够提出宝贵的意见和自己的见解。
这篇关于ASP .NET Core图片批量下载的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统