日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現一個簡單的基于碼云(Gitee) 的 Storage

Intro

上次在 asp.net core 從單機到集群 一文中提到存儲還不支持分布式,并立了一個 flag

基于 github 或者 開源中國的碼云實現一個 storage

于是這兩天就來填坑了。。

實現了一個簡單的基于開源中國的碼云的 storage

準備工作

碼云官方有 API 接口列表 https://gitee.com/api/v5/swagger

上傳文件API:https://gitee.com/api/v5/swagger#/postV5ReposOwnerRepoContentsPath

新建一個倉庫來存我們要保存的文件,新建的時候分支模型選擇默認的單分支模型即可,只要master分支即可 ,最好直接創建 readme 或者新加一個文件以創建分支:

然后需要創建一個 accessToken,在 設置里的私人令牌配置中新建一個token,需要 projects 權限

Storage 簡單實現

參考上面 Gitee 提供的 API 接口,自己實現了一個簡單的 GiteeStorageProvider ,Github 完整源碼:https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation.Common/StorageProvider.cs

///

/// 碼云存儲

///

public class GiteeStorageProvider : IStorageProvider

{

private const string PostFileApiUrlFormat = "https://gitee.com/api/v5/repos/{0}/{1}/contents{2}";

private const string RawFileUrlFormat = "https://gitee.com/{0}/{1}/raw/master{2}";

private readonly HttpClient _httpClient;

private readonly ILogger _logger;

private readonly GiteeStorageOptions _options;

public GiteeStorageProvider(HttpClient httpClient, ILogger<GiteeStorageProvider> logger, IOptions<GiteeStorageOptions> options)

{

_logger = logger;

_httpClient = httpClient;

_options = options.Value;

}

public async Task SaveBytes(byte[] bytes, string filePath)

{

var base64Str = Convert.ToBase64String(bytes);

using (var response = await _httpClient.PostAsFormAsync(PostFileApiUrlFormat.FormatWith(_options.UserName, _options.RepositoryName, filePath),

new Dictionary<string, string>

{

{ "access_token", _options.AccessToken },

{ "content", base64Str },

{ "message" , $"add file" }

}))

{

if (response.IsSuccessStatusCode)

{

return RawFileUrlFormat

.FormatWith(_options.UserName, _options.RepositoryName, filePath);

}

var result = await response.Content.ReadAsStringAsync();

_logger.LogWarning($"post file error, response: {result}");

return null;

}

}

}

public class GiteeStorageOptions

{

public string UserName { get; set; }

public string RepositoryName { get; set; }

public string AccessToken { get; set; }

}

服務注冊,這里用了 HttpClientFactory 來使用 HttpClient,個人比較喜歡用強類型的 HttpClient,如果喜歡使用通過 IHttpClientFactory 來顯示創建,也可以注入一個 IHttpClientFactory ,在內部創建 HttpClient

services.Configure<GiteeStorageOptions>(Configuration.GetSection("Storage:Gitee"));

services.AddHttpClient<IStorageProvider, GiteeStorageProvider>();

services.TryAddSingleton<IStorageProvider, GiteeStorageProvider>();

配置示例:

{

"Storage":{

"Gitee":{

"UserName": "weihanli",

"RepositoryName": "storage",

"AccessToken": "xxx"

}

}

}

使用效果

可以看到上傳的圖片已經上傳到我們新建的倉庫了,到倉庫里看一下:

More

只實現了上傳,本來想也加一個列出某個目錄下的所有文件及子目錄,但是看好像沒有接口,如果要實現的話,可能只能基于 git 去實現,從 git 信息里獲取,暫時不怎么用到,先不管了,暫時擱置吧,

Reference

  • https://www.jianshu.com/p/224954dadcaf

  • https://gitee.com/weihanli/storage

  • https://github.com/WeihanLi/ActivityReservation

總結

以上是生活随笔為你收集整理的gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。