今天分享目前找到的圖床最後一篇,這服務比較特別,他主打基於 Web 3 + IPFS 上儲存和檢索媒體的服務
就是 Pinata ,我網路上查一下 Pinata 的意思 : 皮納塔(西班牙語:Piñata),是一種紙糊的容器,其內裝滿玩具與糖果,於節慶或生日宴會上懸掛起來,
讓人用棍棒打擊,打破時玩具與糖果會掉落下來。
蠻有趣的名稱接下來就是我們看上傳圖片的部份,畢竟我們是以圖床為主
1. 一樣你得先註冊註冊之後,你就可以在這裡拿到 API Keys : https://app.pinata.cloud/developers/api-keys
首先你要 Generate 一組新的 API Key 關鍵是要拿到這
個欄位 JWT

2. 拿到 JWT 後接下來就是上傳的部份
C# code:
var client = new HttpClient();
var requestUri = "https://api.pinata.cloud/pinning/pinFileToIPFS";
var JWT="{JWT}";
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {JWT}");
// 構建 MultipartFormDataContent
using (var content = new MultipartFormDataContent())
{
var fileStream = File.OpenRead(filePath);
//保留原始檔名
var fileName = new FileInfo(filePath).Name;
content.Add(new StreamContent(fileStream), "file", Path.GetFileName(filePath));
// 添加 pinataMetadata
content.Add(new StringContent("{\"name\": \""+ fileName + "\"}"), fileName);
// 添加 pinataOptions
content.Add(new StringContent("{\"cidVersion\": 1}"), "pinataOptions");
try
{
// 發送 POST 請求
var response = client.PostAsync(requestUri, content).Result;
var responseContent = response.Content.ReadAsStringAsync().Result;
// 輸出響應結果
if (response.IsSuccessStatusCode)
{
//https://gateway.pinata.cloud/ipfs/{CID}
return "https://gateway.pinata.cloud/ipfs/" + System.Text.Json.JsonDocument.Parse(responseContent).RootElement.GetProperty("IpfsHash").ToString();
}
else
{
Console.WriteLine($"Upload failed. Status code: {response.StatusCode}");
Console.WriteLine(responseContent);
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
finally
{
fileStream.Dispose();
}
}
/* JSON Response
{"IpfsHash":"bafkreidtuguno237ytbyu7jbhm3h4edqk5oagbj4zojk7xa25pdkzmu6w4","PinSize":188459,
"Timestamp":"2024-08-22T09:51:19.710Z","isDuplicate":true}
*/
最後我們看看免費方案的限制

免費方案,最多只能五百個圖片,總和只能 1G 的空間,每個月只有 10G流量,Request 一萬,簡單的說一樣要配合 CDN 使用
一樣一個中小型配合 CDN 也還算是可以,這邊就推薦給大家
reference:
https://docs.pinata.cloud/quickstart
https://ithelp.ithome.com.tw/articles/10306474