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

a63d86d1-461a-eb11-8da9-e4434bdf6706.png

新建一个仓库来存我们要保存的文件,新建的时候分支模型选择默认的单分支模型即可,只要master分支即可 ,最好直接创建 readme 或者新加一个文件以创建分支:

然后需要创建一个 accessToken,在 设置里的私人令牌配置中新建一个token,需要 projects 权限

a93d86d1-461a-eb11-8da9-e4434bdf6706.png

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"

}

}

}

使用效果

ad3d86d1-461a-eb11-8da9-e4434bdf6706.png

可以看到上传的图片已经上传到我们新建的仓库了,到仓库里看一下:

af3d86d1-461a-eb11-8da9-e4434bdf6706.png

More

只实现了上传,本来想也加一个列出某个目录下的所有文件及子目录,但是看好像没有接口,如果要实现的话,可能只能基于 git 去实现,从 git 信息里获取,暂时不怎么用到,先不管了,暂时搁置吧,

Reference

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

extensions.conf的常用参数配置

extensions.conf 拨号方案配置文件&#xff0c;下面是一个简单的拨号方案&#xff0c;通过此处对拨号方案有一个简单的了解。 [from-sql]-----------对应sip配置文件中的context&#xff0c;由此关联执行相应的拨号方案。 exten > 111,1,Answer() -----拨打111的第一步操作&…

载波聚合或双连接的方式进行_智能电表常用远程抄表方式,您想知道吗?--老兵聊电之...

智能电表的远程抄表方式有多种方式&#xff0c;但老王更喜欢以下几种抄表方式&#xff0c;希望您能接受。一、智能电表的工作原理1.智能电表主要是由电子元器件构成&#xff0c;其工作原理是先通过对用户供电电压和电流的实时采样&#xff0c;再采用专用的电能表集成电路&#…

搞个服务器安装黑群晖系统,牛人闲置电脑大改造!超低成本组建家用黑群晖NAS...

一、前言&#xff1a;大家好&#xff0c;俺又来了。这篇原创很早就在构思怎么写了&#xff0c;因为确实作为一个数码爱好者来说&#xff0c;当得知有 群晖 威联通 这种NAS 的东西存在的时候&#xff0c;就忍不住想体验体验。但是奈何自己的资金不够&#xff0c;想一想&#xff…

立体旋转查看图片

声明&#xff1a;如果程序有问题&#xff0c;请各位大虾多多指点&#xff0c;谢谢。 基于psoft.js制作的一款立体旋转查看图片应用 1.可以通过鼠标滑动来操作图片的旋转&#xff0c;可以向右&#xff0c;向左拖动 a。向左滑动 b。向右滑动 c。向左转到一下 2.代码实现&#xff…

max file descriptors_年轻族的战场!宋MAX强势对比嘉际

随着社会的发展&#xff0c;人们对于汽车的要求也是越来越高&#xff0c;各大厂商为了吸引消费者的注意纷纷对旗下的车进行了改款&#xff0c;今天就带大家看看宋MAX对比嘉际外观&#xff1a;指标名称宋MAX嘉际长[mm]47104706宽[mm]18101909高[mm]16801690轴距[mm]27852805整备…

asterisk架构

从架构的角度看来&#xff0c;Asterisk是由许多不同的模块组成的。在设计基于Asterisk的系统时&#xff0c;这种模块化的特性&#xff0c;提供了几乎无限的灵活必。作为Asterisk系统管理员&#xff0c;你拥有选择加载模块的权利。你所加载的每一个模块&#xff0c;都提供了不同…

esp虚拟服务器,esp8266接入云服务器

esp8266接入云服务器 内容精选换一换公有云平台提供的云监控&#xff0c;可以对云耀云服务器的运行状态进行日常监控。您可以通过管理控制台&#xff0c;直观地查看云耀云服务器的各项监控指标。云耀云服务器正常运行。关机、故障、删除状态的云耀云服务器&#xff0c;无法在云…

EDM邮件营销时应该远离的8大不良做法

当我们进行EDM邮件营销时&#xff0c;应该远离一些不良做法。本文博主就为大家总结了8大不良做法&#xff0c;希望能对大家有所帮助。 1- 邮件内容只有图片而没有文字&#xff1a;垃圾邮件发送者为了避开反垃圾邮件系统的关键字检测&#xff0c;发明了用一个方法&#xff0c;就…

c++ primer 第六版 pdf_A3N630 塑壳断路器如何更换.pdf

太阳能单晶炉专用配套变压器&#xff0c;是我公司研发的生产太阳能单晶硅的单晶炉设备专用变压器&#xff0c;本产品作为太阳能单晶炉设备的配套产品&#xff0c;它将电网电源的三相380V电压转换成较低的三相交流50V电压&#xff0c;为加热提供电源&#xff0c;以得到设备加热所…

Asterisk 并发量到100后就出现拨打电话挂机问题

Asterisk 并发量到100后就出现拨打电话挂机问题&#xff0c;经过分析和研究&#xff0c;是由于Agi的并发量达到Asterisk-java默认的最大值100导致&#xff0c;无法创建新的socket连接处理Agi请求。 通过调整Agi的默认最大线程数到200&#xff0c;问题得到解决。但这个并不是问…

datareader对象直接转化为int_Integer、new Integer() 和 int 比较的面试题

作者&#xff1a;chenxiangxiang来源&#xff1a;https://www.cnblogs.com/cxxjohnson/p/10504840.html基本概念的区分&#xff1a;1、Integer 是 int 的包装类&#xff0c;int 则是 java 的一种基本数据类型2、Integer 变量必须实例化后才能使用&#xff0c;而int变量不需要3、…

【10】jQuery学习——入门jQuery选择器之表单选择器

这里我们要知道表单&#xff0c;但是在实际写jq的时候&#xff0c;用到貌似不是很多&#xff0c;所以这里我就直接转梦三秋网站上的课件啦。 当然等以后要用的时候&#xff0c;我们在拿出来研究下&#xff0c;毕竟表单这块&#xff0c;看起来真的很多&#xff0c;眼晕啊~~~ 选…

深度学习 用户画像_一文告诉你什么是用户画像

什么是用户画像用户画像&#xff0c;英文又叫 User Profile&#xff0c;我们经常看到在 PPT 中展现出高大上的用户画像&#xff0c;展现的方式是采用标签云的方式绘制一个人的形状&#xff0c;或者在一个人物形象旁边列出若干人口统计学属性&#xff0c;以此来表达“用户画像”…

个人推荐的SIP software Phone

开源免费的LinPhone&#xff0c;国内很多人基于他继续二次开发 http://www.linphone.org/ Zoiper 有免费的&#xff0c;有收费的&#xff0c;有SDK&#xff0c;支持SIP/IAX(没有NAT问题) 官方下载的免费版本里面就支持中文&#xff01; 免费版本支持&#xff1a;for Window…

_Linux中功能强大的截图工具 - Flameshot

Flameshot 是一款功能强大但易于使用的屏幕截图软件&#xff0c;中文名称火焰截图。Flameshot 简单易用并有一个 CLI 版本&#xff0c;所以你也可以从命令行来进行截图。Flameshot 是一个Linux发行版中完全免费且开源的截图工具。通常Linux发行版中会默认自带一个截图工具&…

jquery动画 -- 1.加载指示器

该系列文章是我阅读《jQuery 1.4 Animation Techniques》后的总结&#xff0c;有兴趣的朋友可以去看原版书籍。 动画效果对于丰富网站的交互体验起到了不可或缺的作用&#xff0c;他可以让你的站点更酷&#xff0c;更吸引人。 什么时候使用动画&#xff1a; 1.当显示或隐藏页面…

centos7 安装redis_Redis6安装(上) - 单机单实例

首先下载新版的redis6并且上传到centos7&#xff1a;安装redis需要gcc的环境&#xff0c;和以往老版本不同&#xff0c;这里的gcc需要高一点的版本。 yum install gcc-c随后升级gcc版本 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c…

SIP消息路由

本文通过一个完整的SIP呼叫实例解释SIP头部的一些常见字段&#xff0c;在对这些字段的解释的同时也阐述了SIP消息的路由过程。下图是呼叫的消息流示意图和所有的消息头部(因为SDP和消息路由无关&#xff0c;故在此省略)&#xff1a; atlanta.com . . . biloxi.com . prox…

手机输入法带拼音声调_word中拼音横向设置

前言在word编辑文字的时候&#xff0c;可以加注拼音&#xff0c;这对于陌生文字辨别读音非常有帮助&#xff0c;但是插入的拼音都是在文字上方的&#xff0c;那如果我们想要横向插入拼音的话&#xff0c;应该怎么操作呢&#xff1f;今天小编就给大家分享&#xff0c;在word中拼…

WCF配置报错 在 ServiceModel 客户端配置部分中,找不到名称 和协定

<?xml version"1.0" encoding"utf-8" ?><configuration><system.serviceModel><client><endpoint address"net.tcp://192.168.6.101:8000/DataAccessService" binding"netTcpBinding" bindingConfigurat…