ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ASP .NET Core图片批量下载

2021-04-14 09:59:47  阅读:277  来源: 互联网

标签:Core ASP string storecode 文件夹 iframe NET 下载 图片


 

图片的批量下载大概分为三步:

一、循环下载网络图片到服务器。

二、将图片文件夹压缩,并且删除下载的图片。

三、浏览器端使用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

我们项目中需要一个批量下载图片的功能。这就是我设计的图片下载的流程以及我的代码。也希望各位能够提出宝贵的意见和自己的见解。

标签:Core,ASP,string,storecode,文件夹,iframe,NET,下载,图片
来源: https://blog.csdn.net/qq_39818210/article/details/115674518

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有