杭州网站推广宣传,女生在建筑公司的职位,番禺人才市场档案中心,网站建设力度实现一个简单的基于码云(Gitee) 的 StorageIntro上次在 asp.net core 从单机到集群 一文中提到存储还不支持分布式#xff0c;并立了一个 flag基于 github 或者 开源中国的码云实现一个 storage于是这两天就来填坑了。。实现了一个简单的基于开源中国的码云的 storage准备工作… 实现一个简单的基于码云(Gitee) 的 StorageIntro上次在 asp.net core 从单机到集群 一文中提到存储还不支持分布式并立了一个 flag基于 github 或者 开源中国的码云实现一个 storage于是这两天就来填坑了。。实现了一个简单的基于开源中国的码云的 storage准备工作码云官方有 API 接口列表 https://gitee.com/api/v5/swagger上传文件APIhttps://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, ILoggerGiteeStorageProvider logger, IOptionsGiteeStorageOptions 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 Dictionarystring, 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 在内部创建 HttpClientservices.ConfigureGiteeStorageOptions(Configuration.GetSection(Storage:Gitee));services.AddHttpClientIStorageProvider, GiteeStorageProvider();services.TryAddSingletonIStorageProvider, GiteeStorageProvider();配置示例{ Storage:{ Gitee:{ UserName: weihanli, RepositoryName: storage, AccessToken: xxx } }}使用效果可以看到上传的图片已经上传到我们新建的仓库了到仓库里看一下More只实现了上传本来想也加一个列出某个目录下的所有文件及子目录但是看好像没有接口如果要实现的话可能只能基于 git 去实现从 git 信息里获取暂时不怎么用到先不管了暂时搁置吧Referencehttps://www.jianshu.com/p/224954dadcafhttps://gitee.com/weihanli/storagehttps://github.com/WeihanLi/ActivityReservation