最近因為客戶不想要在機器上放圖片,而且對他來說這些圖片就是不是很重要,所以決定放在圖床上面做短期使用,但是因為基於有點小潔癖,所以順手研究了一下怎麼 "群組" 化圖片,還有如何刪除圖片。
首先,這篇文章參考 董老師的 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 { "IMAGE_ID" }).Result;
Response.Write("Result :" + result + "
");
5.真的把上傳的照片移除。
var client = new ImgurClient("CLIENTID", "CLIENTSECRET");
var endpoint2 = new ImageEndpoint(client);
var result = endpoint2.DeleteImageAsync("IMAGE_DELETEHASH").Result;
Response.Write("Result :" + result + "
");
刪除之後連結該圖片往只會變這樣
剛好用到筆記一下,順帶一提 目前 imgur 免費策略是 Imgur
API使用信用分配系統來確保容量的公平分配。每個應用程序每天允許大約1,250次上傳,或者每天大約12,500個請求。如果一個月內達到五次每日限額,則該應用將在該月的剩餘時間內被阻止。剩餘的信用額度將與每個請求響應一起顯示在X-RateLimit-ClientRemainingHTTP標頭中。
這點要比較注意。