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

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

原文地址:https://blog.csdn.net/qq_39818210/article/details/115674518

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


数组的定义 Dim MyArray MyArray = Array(1‚5‚123‚12‚98) 可扩展数组 Dim MyArray() for i = 0 to 10
\'参数: \'code:要检测的代码 \'leixing:html或者ubb \'nopic:代码没有图片时默认值
演示效果: 代码下载: 点击下载
环境:winxp sp2 ,mysql5.0.18,mysql odbc 3.51 driver 表采用 myisam引擎。access 2003  不同的地方: 
其实说起AJAX的初级应用是非常简单的,通俗的说就是客户端(javascript)与服务端(asp或php等)脚本语言的数据交互。
<% ’判断文件名是否合法 Function isFilename(aFilename)  Dim sErrorStr,iNameLength,i  isFilename=TRUE
在调用的时候加入判断就行了. {aspcms:navlist type=0 } {if:[navlist:i]<6} < li><a href=\"[navlist:link]\" target=\"_top\">[navlist:name]</a> </li>
导航栏调用 {aspcms:navlist type=0}     <a href=\"[navlist:link]\">[navlist:name]</a>
1.引入外部文件: {aspcms:template src=infobar.html} 2.二级下拉菜单 <ul class=\"nav\">
downpic.asp页面:  <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
Cookies是数据包,可以让网页具有记忆功能,在某台电脑上记忆一定的信息。Cookies的工作原理是,第一次由服务器端写入到客户端的系统中。以后每次访问这个网页,都是先由客户端将Cookies发送到服务器端,再由服务器端
很简单,在需要调用的地方用这种模式 {aspcms:content sort={aspcms:sortid} num=17 order=isrecommend}
网站系统使用ACCESS数据库时,查询时怎么比较日期和时间呢?为什么常常比较出来却是错误的呢?比如早的日期比迟的日期大?
str1=\"1235,12,23,34,123,21,56,74,1232\" str2=\"12\" 问题:如何判断str2是否存在str1中,要求准确找出12,不能找出str1中的1235、123、1232
实例为最新版本的kindeditor 4.1.5. 主要程序: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)
用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜索呢?比如,当在搜索条件框内输入“中国人民”时,自动从中提取“中国”、“人民”等关键字并在数据库内进行搜索。看完本文后,你就可以发
首先感谢ASPCMS官网注册用户xing0203的辛苦付出!一下为久忆YK网络转载原创作者xing0203的文章内容!为了让小白更加清楚的体验替换过程,久忆YK对原文稍作了修改!
数据库连接: <% set conn=server.createobject(\"adodb.connection\") conn.open \"driver={microsoft access driver (*.mdb)};dbq=\"&server.mappath(\"数据库名\")
第1步:修改plugins下的image/image.js 找到\'<input type=\"button\" class=\"ke-upload-button\" value=\"\' + lang.upload + \'\" />\',
asp函数: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)