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
微信掃一掃關註我公眾號
一起學習,一起進步