[C#] 上圖到 imgur圖床 建立相簿、上傳圖片至相簿、移除相簿中圖片、刪除圖片

2020-03-27

最近因為客戶不想要在機器上放圖片,而且對他來說這些圖片就是不是很重要,所以決定放在圖床上面做短期使用,但是因為基於有點小潔癖,所以順手研究了一下怎麼 "群組" 化圖片,還有如何刪除圖片。



首先,這篇文章參考 董老師的 http://studyhost.blogspot.com/2018/12/imgurcom-api.html ,所以我跟他文章都是使用 這 nuget 套件 : https://www.nuget.org/packages/Imgur.API/4.0.1/ ,專案網址 :  https://imgurapi.readthedocs.io/en/latest/ ,其實 API 那編寫的蠻清楚的,只是有的地方是用 ID 或是 使用 DeleteHash 這點讓我測試了一下,所以筆記一下

先行步驟 先去這裡註冊 https://imgur.com/signin 你才會拿到 CLIENTID, CLIENTSECRET

1. 建立相簿,因為我們在儲存照片的時候,可能需要分辨不同客戶上傳的,所以就會分群的概念,所以我們就得先建立相簿

var client = new ImgurClient("CLIENTID", "CLIENTSECRET"); var endpoint = new AlbumEndpoint(client); var album = endpoint.CreateAlbumAsync("測試1", "測試敘述").Result; Response.Write("Album Create . Id: " + album.Id + ", DeleteHash:"+album.DeleteHash); //Album Create . Id: FGwzjgW, DeleteHash:GKgY7AgJgaN759c

這裡面除了 album_id 以外 他傳回的 物件 有一個 DeleteHash 也記得一起儲存起來。
之後會有用途,這時候 我範例得到的 album_id 是 FGwzjgW 所以可以透過瀏覽器讀取的網址是 https://imgur.com/a/FGwzjgW , DeleteHash : GKgY7AgJgaN759c

2.上傳圖片,上傳的時候,記得補入第一步驟取得的 album 的 DeleteHash  在上傳時候帶入 範例為 GKgY7AgJgaN759c

var client = new ImgurClient("CLIENTID", "CLIENTSECRET"); var endpoint = new ImageEndpoint(client); IImage image; using (var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "sample2.jpg", FileMode.Open)) { //這邊的 GKgY7AgJgaN759c 是 album deletehash image = endpoint.UploadImageStreamAsync(fs, "GKgY7AgJgaN759c").GetAwaiter().GetResult(); } //顯示圖檔位置 Response.Write("Image Id: " + image.Id + " , Url:" +image.Link+ " ,DeleteHash:"+image.DeleteHash); //Image Id: vrbHYjn , Url:https://i.imgur.com/vrbHYjn.jpg ,DeleteHash:aAYG5wBZxpixNcd
一樣它也會有一個 DeleteHash 一樣記錄下來,需要處理的時候會用到,該範例中 Id : vrbHYjn , image DeleteHash : aAYG5wBZxpixNcd  , Link : https://i.imgur.com/vrbHYjn.jpg ,這時候你去步驟一的相簿網址 https://imgur.com/a/FGwzjgW  就可以看到上傳的那照片在該相簿中。

3.上傳兩張照片到第一步建立的相簿後,我們可以取得相簿下面所有image ids 。

var client = new ImgurClient("CLIENTID", "CLIENTSECRET"); var endpoint = new AlbumEndpoint(client); //FGwzjgW : album Id var album = endpoint.GetAlbumAsync("FGwzjgW ").Result; Response.Write("Image Ids: "+string.Join(",", album.Images.Select(x => x.Id))); //Image Ids: vrbHYjn,4tQyo4s

4.將照片從相簿中移除(但是不是把照片刪掉,只是把這張照片從相簿中移除)

var client = new ImgurClient("CLIENTID", "CLIENTSECRET"); var endpoint = new AlbumEndpoint(client); //0er8Ef6Ra0wYLls album's DeleteHash //eiDnpOZ : image's Id var result = endpoint.RemoveAlbumImagesAsync("ALBUM_DELETEHASH", new List<string> { "IMAGE_ID" }).Result; Response.Write("Result :" + result + "<br>");

5.真的把上傳的照片移除。
var client = new ImgurClient("CLIENTID", "CLIENTSECRET"); var endpoint2 = new ImageEndpoint(client); var result = endpoint2.DeleteImageAsync("IMAGE_DELETEHASH").Result; Response.Write("Result :" + result + "<br>");

刪除之後連結該圖片往只會變這樣



剛好用到筆記一下,順帶一提 目前 imgur 免費策略是 Imgur API使用信用分配系統來確保容量的公平分配。每個應用程序每天允許大約1,250次上傳,或者每天大約12,500個請求。如果一個月內達到五次每日限額,則該應用將在該月的剩餘時間內被阻止。剩餘的信用額度將與每個請求響應一起顯示在X-RateLimit-ClientRemainingHTTP標頭中。 這點要比較注意。


當麻許的碎念筆記 2014 | Donma Hsu Design.