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图片批量下载的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程