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

来源:https://www.cnblogs.com/w5942066/archive/2022/05/07/16244230.html
-Advertisement-
Play Games

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


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

 

版權聲明:本文為 魏楊楊 原創文章併發布到博客園, 除了【萬仟網】外, 其他平臺歡迎轉載,但必須在文章頁面明顯位置寫明作者和出處,非常感謝。技術交流QQ群 99210270 IT軟體技術交流

微信掃一掃關註我公眾號

一起學習,一起進步


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python 是一種極其多樣化和強大的編程語言!當需要解決一個問題時,它有著不同的方法。在本文中,將會展示列表解析式 (List Comprehension)。我們將討論如何使用它?什麼時候該或不該使用它? 列表解析式的優勢 •比迴圈更節省時間和空間。 •需要更少的代碼行。 •可將迭代語句轉換為公式 ...
  • Python代碼規範 代碼規範這東西也是很重要的,一定要註意 給你舉個例子: 你代碼全部寫對了,但是你的代碼規範沒弄好,找個半天,不知道錯哪了,那感覺,簡直不要太崩潰 好啦,下麵我們開始學習吧~ 一、簡明概述 1、編碼 如無特殊情況, 文件一律使用 UTF-8 編碼如無特殊情況, 文件頭部必須加入 ...
  • 一個工作了4年的小伙伴,他說他從線下培訓就開始接觸Spring,到現在已經快5年時間了。 從來沒有想過,為什麼要使用Spring 框架。 結果在面試的時候,竟然遇到一個這樣的問題。 大腦一時間短路了,來求助我,這類問題應該怎麼去回答。 下麵我們來看看普通人和高手的回答 普通人: 嗯。。。。。。。。。 ...
  • 二分查找實際上就是採用了分治法的思想 以下模板都以升序數組為準 模板一: 標準的二分查找 場景:數組元素有序且不重覆 有的話返回索引,沒有返回-1 int binarySearch(vector<int>& arr, int target) { int left = 0, right = nums. ...
  • 原創:微信公眾號 【阿Q說代碼】,歡迎分享,轉載請保留出處。 之前寫過一篇名為《看了同事寫的代碼,我竟然開始默默的模仿了。。。》的文章,今天偶然間看了下後臺數據,大吃一驚。該文章的閱讀量在微信公眾號內竟然達到了驚人的5W+ 。對於沒見過市面的我來說已經相當滿足了。 當然,能達到這樣的數據離不開各位大 ...
  • 近幾年網路發展的越來越好,其中的功勞離不開默默付出的程式員,正是他們任勞任怨的付出,才換來現在的便捷,在程式員匯聚的論壇,一名程式員卻道出另一種現象:好久沒打代碼了,回想以前辭職到老家礦洞里秘密開發的日子,二年整整敲了45萬行代碼。 這便是該程式員的原文,在貼文最下方,還曬出山洞的全景樣貌,山洞看起 ...
  • 回顧總結 到目前為止,Spring源碼中AbstractApplicationContext#refresh方法的已經解讀到第11個方法finishBeanFactoryInitialization,前10個方法介紹了: BeanFactory的準備,創建,刷新,個性化BeanFactory的擴展點 ...
  • package com.oop.demo06;public class Person { public void run(){ System.out.println("run"); }} package com.oop.demo06;public class Student extends Pers ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...