1. 程式人生 > 其它 >Asp.Net Core中網路圖片的打包下載

Asp.Net Core中網路圖片的打包下載

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