[C#] 可程式化的免費圖床方案 - Pinata

今天分享目前找到的圖床最後一篇,這服務比較特別,他主打基於 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 也還算是可以,這邊就推薦給大家

-

本文原文首發於我的個人部落格:可程式化的免費圖床方案 - Pinata

reference:

https://docs.pinata.cloud/quickstart

https://ithelp.ithome.com.tw/articles/10306474


 

---

The bug existed in all possible states.
Until I ran the code.