龙空技术网

Asp.Net Core中下载图片打包zip

中年农码工 238

前言:

此时小伙伴们对“net core 图片处理”大致比较关注,大家都想要知道一些“net core 图片处理”的相关内容。那么小编也在网络上汇集了一些有关“net core 图片处理””的相关资讯,希望姐妹们能喜欢,兄弟们一起来了解一下吧!

1、前言

最近没什么假期,但是却比以前还忙!工作、工作、工作,就像赶集似的,聚在一起。这个上海啥时候才能解封困在这里暗无天日的。早点解封出去看看想见的人的人,做做该做的事。工作中有那么一个需求客户想要通过自己选择列表的checkbox然后下载所选列表里面的图片,图片我们是存在图片服务器的,下载需要下载图片的一个压缩包zip。

2、思路

因为图片是在图片服务器中的,而部署程序的又是另一台服务器,所以我们先要把所选的图片从图片服务器下载在程序部署的服务器上面,然后压缩这个文件夹返回一个下载链接到客户端。

3、代码

 public object DownBatchImg()        {            //返回格式            object? ret = new();            try            {                // 这里定义了4个图片,号分割  第一个是文件名,后面是图片的网络路径                List<string> imgList = new()                {                    "wyywx.jpg,;,                    "xylwx.jpg,;,                    "wyy2x.jpg,;,                    "xyl3x.jpg,;                };                //定义下载的链接                string retPath = $"{Request.Scheme}://{Request.Host.Host}:{Request.Host.Port}/UploadFilesDown/BatchImgDown.zip";                //下载图片文件存放路径 不能跟 返回的下载zip路径是同一个目录                string savePath = $"{_env.WebRootPath}/UploadFilesTepm/";                //zip存放路径  绝对路径                string path = $"{ _env.WebRootPath}/UploadFilesDown/BatchImgDown.zip";                //之前有下载过的就把之前的删除了                if (System.IO.File.Exists(path))                    System.IO.File.Delete(path);                //创建文件夹 下载图片的文件夹                if (!Directory.Exists(savePath))                    Directory.CreateDirectory(savePath);                //创建文件夹 返回压缩路径                if (!Directory.Exists($"{ _env.WebRootPath}/UploadFilesDown/"))                    Directory.CreateDirectory($"{ _env.WebRootPath}/UploadFilesDown/");                //循环下载图片                foreach (string it in imgList)                {                    //取出文件名跟网络路径                    var itList = it.Split(',').ToList();                    //去除所有""                    itList.RemoveAll(x => x == "");                    //文件名 wyywx.jpg                    string fileName = itList[0];                    //文件网络路径                     string item = itList[1];                    //网路请求 习惯用HttpClient                    HttpClient client = new();                    //读取文件流                    Stream? stream = client.GetStreamAsync(item).Result;                    FileStreamResult? fils = File(stream, "application/vnd.android.package-archive", Path.GetFileName(item));                    string pathLast = savePath + Path.GetFileName(fileName);//存放文件绝对路径跟文件名                    using (FileStream fs = new(pathLast, FileMode.Create))                    {                        //下载图片                        fils.FileStream.CopyTo(fs);                    }                }                //压缩下载图片所在的文件夹                ZipFile.CreateFromDirectory(savePath, path);                //压缩成功就删除下载图片的文件夹                if (Directory.Exists(savePath))                    Directory.Delete(savePath, true);                ret = new                {                    code=200,                    msg="下载打包成功",                    data= retPath                };            }            catch (Exception ex)            {                ret = new                {                    code = 500,                    msg = "系统异常"+ex.Message,                };            }            return ret;        }

第一个下载链接必须是当前程序部署的服务器,包括端口信息,当然程序的中间件访问静态文件要加上去app.UseStaticFiles();

这里需要注意的就是 下载的文件夹跟 打包的文件夹一定不能在同一个文件夹下面操作,会报 IO 异常的。

标签: #net core 图片处理 #net core word 文档转图片