基于.NetCore開發博客項目 StarBlog - (9) 圖片批量導入

系列文章

  • 基于.NetCore開發博客項目 StarBlog - (1) 為什么需要自己寫一個博客?

  • 基于.NetCore開發博客項目 StarBlog - (2) 環境準備和創建項目

  • 基于.NetCore開發博客項目 StarBlog - (3) 模型設計

  • 基于.NetCore開發博客項目 StarBlog - (4) markdown博客批量導入

  • 基于.NetCore開發博客項目 StarBlog - (5) 開始搭建Web項目

  • 基于.NetCore開發博客項目 StarBlog - (6) 頁面開發之博客文章列表

  • 基于.NetCore開發博客項目 StarBlog - (7) 頁面開發之文章詳情頁面

  • 基于.NetCore開發博客項目 StarBlog - (8) 分類層級結構展示

  • 基于.NetCore開發博客項目 StarBlog - (9) 圖片批量導入

  • ...

前言

前面把分類層級結構做出來了,不過還不完美,然后我就又折騰了一波,把那個組件fork了一份魔改實現了我要的效果,還順便上傳了NPM包,詳情可以看這篇文章:魔改了一下bootstrap-treeview組件,發布個NPM包體驗一下

文章這部分就暫時完成了,接下來是攝影模塊,首先要搞定圖片的批量導入。

理清需求

先來看看模型設計

public?class?Photo?{[Column(IsIdentity?=?false,?IsPrimary?=?true)]public?string?Id?{?get;?set;?}public?string?Title?{?get;?set;?}public?string?Location?{?get;?set;?}public?string?FilePath?{?get;?set;?}public?long?Height?{?get;?set;?}public?long?Width?{?get;?set;?}public?DateTime?CreateTime?{?get;?set;?}
}

PS:其中Location是照片的拍攝地點,FilePath是存儲相對路徑。

之前路線圖中設定的是要支持圖片Exif數據讀取并自動定位,不過目前第一版沒有實現,需要手動輸入地點,存在Location字段中。

然后還有需要讀取圖片的長跟寬,保存起來,后面做瀑布流展示的時候有用。

那么,流程也理清了:掃描目錄 -> 復制圖片 -> 讀取圖片信息 -> 保存到數據庫

代碼實現

OK,可以開始寫代碼了

掃描目錄和復制都比較簡單,先來看看如何獲取圖片的尺寸。

在.Net Framework時代,框架內置有操作圖片的標準庫,但.Net Core時代就無了,好像是因為之前的庫是跟GDI這種Windows平臺獨有技術綁定的,為了跨平臺只能砍了

不過.NetCore有個非常厲害的ImageSharp庫可以操作圖片,作者是SixLabors,這名字很有意思啊,六個勞工,哈哈

讀取圖片

那么先來寫個讀取圖片信息的方法

編輯StarBlog.Web/Services/PhotoService.cs文件,在PhotoService中添加方法

using?SixLabors.ImageSharp;public?class?PhotoService?{///?<summary>///?獲取圖片的物理存儲路徑///?</summary>///?<param?name="photo"></param>///?<returns></returns>private?string?GetPhotoFilePath(Photo?photo)?{return?Path.Combine(_environment.WebRootPath,?"media",?photo.FilePath);}///?<summary>///?重建圖片數據(掃描圖片的大小等數據)///?</summary>///?<param?name="photo"></param>///?<returns></returns>private?Photo?BuildPhotoData(Photo?photo)?{var?savePath?=?GetPhotoFilePath(photo);using?(var?img?=?Image.Load(savePath))?{photo.Height?=?img.Height;photo.Width?=?img.Width;}return?photo;}
}

傳入Photo對象,根據圖片完整路徑去加載,然后把寬度和高度存到對應的屬性里

批量導入

接著來寫批量導入的方法,完整代碼見:https://github.com/Deali-Axy/StarBlog/blob/master/StarBlog.Web/Services/PhotoService.cs

public?List<Photo>?BatchImport()?{var?result?=?new?List<Photo>();var?importPath?=?Path.Combine(_environment.WebRootPath,?"assets",?"photography");var?root?=?new?DirectoryInfo(importPath);foreach?(var?file?in?root.GetFiles())?{var?photoId?=?GuidUtils.GuidTo16String();var?filename?=?Path.GetFileNameWithoutExtension(file.Name);var?photo?=?new?Photo?{Id?=?photoId,Title?=?filename,CreateTime?=?DateTime.Now,Location?=?filename,FilePath?=?Path.Combine("photography",?$"{photoId}.jpg")};var?savePath?=?GetPhotoFilePath(photo);file.CopyTo(savePath,?true);photo?=?BuildPhotoData(photo);_photoRepo.Insert(photo);result.Add(photo);}return?result;
}

只掃描一層文件目錄,不像博客批量導入那樣遞歸遍歷所有子目錄

因為圖片的沒有層級結構

這個方法最后返回導入的圖片列表

導入的圖片會復制到StarBlog.Web/wwwroot/assets/photography

沒有像導入博客那樣寫在單獨一個Project里是因為這個功能需要用接口來調用(其實導入博客也需要,后續我會整合到blogService中)

Controller

為了有始有終,把接口這部分代碼也貼一下

///?<summary>
///?批量導入圖片
///?</summary>
///?<returns></returns>
[Authorize]
[HttpPost("[action]")]
public?ApiResponse<List<Photo>>?BatchImport()?{var?result?=?_photoService.BatchImport();return?new?ApiResponse<List<Photo>>?{Data?=?result,Message?=?$"成功導入{result.Count}張圖片"};
}

導入完成后接口返回圖片列表

實現效果

皮一下… 這部分沒有圖片,等下一篇介紹圖片瀑布流就有啦~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286713.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zookeeper 入門講解實例 轉

轉 http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.htmlzookeeper使用和原理探究&#xff08;一&#xff09;zookeeper介紹zookeeper是一個為分布式應用提供一致性服務的軟件&#xff0c;它是開源的Hadoop項目中的一個子項目&#xff0c;并且根據google發表的&l…

小程序仿微信發現頁 03《 程序員變現指南之 微信QQ 小程序 真的零基礎開發寶典》

本系列教程是針對粉絲的變現教程&#xff0c;還不是粉絲的可以關注我并且到社區&#xff1a;https://bbs.csdn.net/topics/603436232 進行打卡&#xff0c;不是老粉的也可以獲取最終的技術變現學習&#xff0c;最終還有詳細的變現教程等你來。 前言 《 程序員變現指南之 微信…

Silverlight與WCF之間的通信(4)silverlight以net.tcp方式調用console上寄宿的wcf服務

&#xff08;由于最近是針對一個demo進行的研究&#xff0c;在之前公開過代碼結構&#xff0c;這里只是對需要改動的地方加以說明&#xff09; WCF4.0使得編寫wcf服務不再那么復雜&#xff0c;去掉了許多的配置信息&#xff0c;客戶端只需要一個服務地址&#xff0c;便可在系統…

【空間數據庫】空間數據庫引擎(Spatial DataBase Engine)ArcSDE詳解

一、空間數據庫引擎概述 空間數據庫引擎的概念最早由ESRI提出。ESRI對SDE的定義是:從空間數據管理的角度看,SDE是一個連續的空間數據模型,借助這一模型,我們可以將空間數據加人到關系數據庫系統( RDBMS)中去。 SDE可以理解為基于特定的空間數據模型,在特定的數據存儲、數…

Git之提示There is no tracking information for the current branch.

1 問題 我項目比如是0.2分支&#xff0c;我需要修改項目的git地址&#xff0c;然后再pull新的代碼 1&#xff09;修改github地址&#xff08;讀者可以忽略&#xff09; 1.git remote 查看所有遠程倉庫 2.git remote rm origin 刪除之前的版本庫 3.git remote add origin htt…

Maui學習之路(一)--Windows窗體設置

Maui的學習之路作為 Maui的先行者&#xff0c;我有話要說&#xff0c;微軟你為了讓我成為牛 B 的程序員真的是煞費苦心&#xff0c;你一定是覺得我不夠牛逼所以針對我&#xff0c;存心想氣死我。好了廢話不多說&#xff0c;Maui現在也算是正式發布了&#xff0c;我有點想用它來…

Git 常用命令大全

Git 是一個很強大的分布式版本控制系統。它不但適用于管理大型開源軟件的源代碼&#xff0c;管理私人的文檔和源代碼也有很多優勢。 Git常用操作命令&#xff1a; 1) 遠程倉庫相關命令 檢出倉庫&#xff1a;$ git clone git://github.com/jquery/jquery.git 查看遠程倉庫&#…

為什么本地使用js或jquery操作cookie在谷歌瀏覽器chrome中不生效?

2019獨角獸企業重金招聘Python工程師標準>>> 為什么本地使用js或jquery操作cookie在谷歌瀏覽器chrome中不生效&#xff1f;新手學習js或jquery時&#xff0c;一般是在本地調試&#xff08;前端學習一般用不到服務器端&#xff09;&#xff0c;當學習到cookie一節時&…

全解小程序猜數字游戲 04《 程序員變現指南之 微信QQ 小程序 真的零基礎開發寶典》

本系列教程是針對粉絲的變現教程&#xff0c;還不是粉絲的可以關注我并且到社區&#xff1a;https://bbs.csdn.net/topics/603436232 進行打卡&#xff0c;不是老粉的也可以獲取最終的技術變現學習&#xff0c;最終還有詳細的變現教程等你來。 社區有獎勵 下面有投票 本文也…

Android之解決主頁面Activity監聽fragment退出問題(由NavHostFragment和RxFragment一起管理fragment)

1、 問題 app里面目前主頁面是一個activity,然后部分fragment是由NavHostFragment管理,當splash、login等頁面也放在navigation時,按手機的返回鍵這些頁面只能一頁頁回退,因為設置了 app:defaultNavHost="true" 并不能在某個頁面例如splash、login按返回鍵時退…

linux之ps命令詳解

linux中ps(process status) 命令是LINUX下最常用的也是非常強大的進程查看命令&#xff0c;運用該命令可以確定有哪些進程正在運行和運行地狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多地資源等等。 ps命令最常用的是用于監控后臺進程的工作情況。 Linux 查看進程p…

【空間數據庫】傳統數據模型(層次、網狀、關系)和空間數據模型詳解

數據模型是指數據庫的組織形式,它決定了數據庫中數據之間聯系的表達方式,即把在計算機中表示客觀事物及其聯系的數據及結構稱為數據模型。本文詳細講述傳統三大數據模型和空間數據模型。 一、數據模型概述 數據模型是指數據庫的組織形式,它決定了數據庫中數據之間聯系的表…

聊聊 C# 中的多態底層 (虛方法調用) 是怎么玩的

最近在看 C 的虛方法調用實現原理&#xff0c;大概就是說在 class 的首位置存放著一個指向 vtable array 指針數組 的指針&#xff0c;而 vtable array 中的每一個指針元素指向的就是各自的 虛方法&#xff0c;實現方式很有意思&#xff0c;哈哈&#xff0c;現在我很好奇 C# 中…

sublime text 3 安裝、添加命令行啟動、漢化、注冊碼

1. 安裝sublime&#xff1a; 下載&#xff1a;http://www.sublimetext.com/3 添加命令行啟動&#xff1a;設置環境變量->計算機->右鍵屬性->高級系統設置->環境變量->系統變量->Path->編輯&#xff0c;加入";安裝路徑"(如&#xff1a;;D:\Progr…

MVC基礎知識-View

public ActionResult Index() {ViewBag.Message "Modify this template to jump-start your ASP.NET MVC application.";//展現到視圖中數據//~/Views/Home/Index.cshtmlreturn View(); //展現指定的視圖&#xff0c;當沒有指定視圖名稱時&#xff0c;默認是指向根目…

Android之設置當前app為默認瀏覽器研究

1 需求 把當前app設置為默認瀏覽器 2 主要思路 分析競品,我們主要通過2種方式設置app為默認瀏覽器 直接跳 手機“設置默認應用”界面來讓用戶選擇 默認瀏覽器為哪個app打開一個鏈接,拉起手機所有瀏覽器,讓用戶去選擇哪個瀏覽器,并且只有點擊“始終”才會生效,僅僅點擊“…

Linux下的用戶和組

2019獨角獸企業重金招聘Python工程師標準>>> 用戶和組 GNU/Linux 通過用戶和用戶組實現訪問控制 —— 包括對文件訪問、設備使用的控制。Linux 默認的訪問控制機制相對簡單直接&#xff0c;不過還有一些更加高級的機制&#xff0c;包括 ACL 和 LDAP Authentication.…

漫畫C語言 做個聊天軟件你不懂也得懂

學完C語言做不出東西&#xff1f;不存在的&#xff0c;咱們做一個最“隱私”的聊天器&#xff0c;就倆人&#xff0c;你和我。咱們聊天的信息你知我知沒別人知。 對了&#xff0c;本文評論區點贊、收藏抽獎。 社區也有抽獎&#xff0c;本周社區抽獎帖子 &#xff1a;https://b…

【Microstation】第一章:Microstation三維模型構建概述

MicroStation 是國際上和AutoCAD齊名的二維和三維CAD設計軟件&#xff0c;第一個版本由Bentley兄弟在1986年開發完成。其專用格式是DGN&#xff0c;并兼容AutoCAD的DWG/DXF等格式。 MicroStation是Bentley 工程軟件系統有限公司在建筑、土木工程、交通運輸、加工工廠、離散制造…

libgdx游戲引擎開發筆記(十)SuperJumper游戲例子的講解(篇四)---- 主游戲界面內部框架編寫...

上一講&#xff0c;我們已經實現了點擊play進入游戲界面但僅僅是個黑屏 今天&#xff0c;我們就試著編寫代碼讓它出現游戲的一些簡單場景。還是在上一講的代碼基礎上&#xff0c;我們創建兩個類&#xff1a;World 和 WorldRenderer 1.Word類&#xff1a; 12345678910111213141…