Asp.Net Core中下載圖片打包zip

1、前言

    好久沒有更新博客了,最近沒什麼假期,但是卻比以前還忙!工作、工作、工作,就像趕集似的,聚在一起。這個上海啥時候才能解封困在這裏暗無天日的。早點解封出去看看想見的人的人,做做該做的事。工作中有那麼一個需求客戶想要通過自己選擇列表的checkbox然後下載所選列表裏面的圖片,圖片我們是存在圖片服務器的,下載需要下載圖片的一個壓縮包zip。

2、思路

因爲圖片是在圖片服務器中的,而部署程序的又是另一臺服務器,所以我們先要把所選的圖片從圖片服務器下載在程序部署的服務器上面,然後壓縮這個文件夾返回一個下載鏈接到客戶端。

3、代碼

 public object DownBatchImg()
        {
            //返回格式
            object? ret = new();
            try
            {
                // 這裏定義了4個圖片,號分割  第一個是文件名,後面是圖片的網絡路徑
                List<string> imgList = new()
                {
                    "wyywx.jpg,http://www.yijianlan.com/images/wyywx.jpg",
                    "xylwx.jpg,http://www.yijianlan.com/images/xylwx.jpg",
                    "wyy2x.jpg,http://www.yijianlan.com/images/wyywx.jpg",
                    "xyl3x.jpg,http://www.yijianlan.com/images/xylwx.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];
                    //文件網絡路徑 http://www.yijianlan.com/images/wyywx.jpg
                    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();

   本文鏈接 https://www.cnblogs.com/w5942066/p/16244230.html

    這裏需要注意的就是 下載的文件夾跟 打包的文件夾一定不能在同一個文件夾下面操作,會報 IO 異常的。

    PASS:心情的顏色是活潑熱烈的紅色,是生機盎然的綠色,是尊貴華麗的黃色,好好地,用這種種顏色做心情,來書寫生活,不要讓它變得灰暗  ^_^    。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章