命令行请求网站地址带token_利用gitlab或gitee作为网站免费图床的C#实现

news/2024/5/9 19:03:27/文章来源:https://blog.csdn.net/weixin_39980929/article/details/110966505

在很久以前,大家都还在开开心心的撸着新浪图床的羊毛,突然在某一天开始,新浪图床的图片接二连三的全挂掉了,所有的新浪图床图片全部都加上防盗链了,请求报403,当然也包括博主我在内的,当时的内心是崩溃的,于是赶紧想办法,在无奈之下,想了一个馊主意,那就是先把网站的Refer暂时先屏蔽掉,于是,就在网站的母版页面加上了下面这段代码:

<meta name="referrer" content="no-referrer">

加上之后,网站的所有图片确实可以继续正常访问了,但也只是临时解决方案,所以趁正常的时候赶紧想办法搬到其他还有什么可以撸的免费图床,想到了sm.ms和人民网图床,那就写代码来搬图床吧,但馊主意毕竟是馊主意,在搬图床的时候,发现了sm.ms有上传频次限制,同时还有图片被和谐掉的可能,而人民网图床有上传失败和上传后图片格式不正确的问题。

免费图床就没有可以继续撸得了么???

无奈之下想到了阿里云OSS,说干就干,马上开通了阿里云OSS,把图片都搬过去了,感觉美滋滋,然而,在用了两天的OSS之后又发现,这玩意儿太耗流量了吧,一天跑掉10多GB的流量,有点吃不消(因为网站没备案,所以用不了阿里云的CDN加速)!

还是只有想办法看看有什么既可靠又免费的图床,于是想到了gayhub,但怎么通过代码的形式传图到gayhub呢?便开始了看API文档以及Google查找有没有相关的实现案例,很遗憾,没有找到相关的实现。

这时候一同事竟然给了我一个馊主意:手动传图到gayhub!我每次发表和修改文章需要传图的时候你告诉我需要手动传到gayhub上去???

11bcad9c4974d7c7890140a7e0fab737.png

我又想到了gaylab,于是又研究gaylab的API,发现,好像有点靠谱的样子,那就研究研究吧,但gayhub和gaylab的域名ping值实在是太高了,就算直接传上去了,访问速度也是相当慢的,不过gaylab毕竟是开源的,任何人都可以私人部属一个git托管服务器(因为之前传TeamViewer之类的资源撸过很多速度快的gaylab),如果把gaylab的API搞通之后,我再去撸个国内某大学的gaylab账号,不就可以实现免费图床了嘛!如果我多去撸几个gaylab账号,不就可以实现图床CDN分流了么,一个挂掉了我再批量替换一下地址就行了,图片始终还在!

那就开干吧!经过研究发现,gaylab都不能直接上传文件的,而是必须把文件转成Base64编码后,通过json提交到服务端进行创建文件。而且需要配置相关授权信息。

开始放码过来了!

上传图片到gaylab

要能够顺利上传图片到gaylab,大致流程是

1.创建一个公共仓库;
2.生成private_token;
3.根据生成的private_token去获取你要上传的仓库的repository_id;
4.有了repository_id便可以调对应的API去上传文件到gaylab了;
5.上传成功后便可直接访问文件

首先我们创建一个公共仓库imgbed

c80b7a14b881c3ce8db22e120ef87f54.png

接下来需要创建一个private_token,在gaylab的个人设置页面,选择左边的【Access Token】菜单,右边填写token的名字和勾上相关权限,就可以创建private_token了

0c9a17b2f1d6ece2fbc667b00f6ff518.png

6b3c4800cbdf76e72e9e3c0104ea4011.png

有了这个token,我们便可以查找到repository_id,通过接口/api/v4/projects?private_token=<你的private_token>&search=<项目仓库名>就可以查找到仓库的id,比如我查询到我的仓库id是29

31dcea5f8f9eb53598b590043e4e501c.png

现在就可以拿着我们的private_token和repository_id去上传文件了,接口地址:/api/v4/projects/<项目id>/repository/files/<文件路径>,请求方式post

添加请求头:PRIVATE-TOKEN,值为private_token

Request body格式如下:

{"branch": "master", // 需要上传到哪个分支,必填"author_email": "author@example.com", // 上传人邮箱,必填"author_name": "Firstname Lastname", // 上传人名字,必填"encoding":"base64", // 文件内容编码,一定是Base64"content": "some content", // Base64编码的文件内容,必填"commit_message": "create a new file" // 提交信息,必填
}

官网文档说明:https://docs.gitlab.com/ee/api/repository_files.html#create-new-file-in-repository

比如我想上传一个文件名为test.jpg的图片,则接口地址为/api/v4/projects/29/repository/files/test.jpg

请求头为:

PRIVATE-TOKEN:xxxx

请求体为:

{"branch": "master","author_email": "admin@masuit.com","author_name": "懒得勤快","encoding":"base64","content": "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","commit_message": "上传一张图片"
}

如果上传成功,接口将返回201的状态码。

ccdfd5166f9224cbe60acce90d4bd61e.png

既然现在已经调通了,我们也可以落实到具体的代码实现了,大致就有两种方向了,一种是直接上传一个本地文件,另一种则是直接上传一个流,这里我们一上传二进制流为例来实现,既然上传流都能实现,那上传一个本地文件还不简单么?

因为需要一个Base64,所以我们需要把一个二进制流转换成Base64后再上传。

        /// <summary>/// gitlab图床/// </summary>/// <param name="stream"></param>/// <param name="file"></param>/// <returns></returns>public async Task<(string url, bool success)> UploadGitlab(Stream stream, string file){string base64String = Convert.ToBase64String(stream.ToByteArray()); // 将流转换成Base64编码_httpClient.DefaultRequestHeaders.Add("PRIVATE-TOKEN", "你的PRIVATE-TOKEN"); // 添加请求头string path = $"{DateTime.Now:yyyyMMdd}/{Path.GetFileName(file)}";using (var resp = await _httpClient.PostAsJsonAsync("https://gitlab.com/api/v4/projects/29/repository/files/" + HttpUtility.UrlEncode(path), new{branch = "master",author_email = "1@1.cn",author_name = "ldqk",encoding = "base64",content = base64String,commit_message = "上传一张图片"})){if (resp.IsSuccessStatusCode || (await resp.Content.ReadAsStringAsync()).Contains("already exists")){return ("https://gitlab.com/ldqk/imgbed/raw/master/" + path, true);}}return await UploadSmms(stream, file);}

到此,通过代码实现了gaylab的图床,但是我还是不满足,撸的最快的某大学的gaylab感觉还是有点慢,于是我又想到了gitee(我为什么没早想到它???)

上传图片到码云

相比于之前撸的其他的免费gaylab,可靠性应该也比不过码云,而且码云还更快啊!文档也更友好啊!相比于gaylab,这个就更简单了。

和刚才的流程也差不多,同样需要先建一个公共仓库,然后生成一个access_token,我们到gitee的个人设置页面找到【私人令牌】就可以创建一个access_token。

237bbb593f1387eb6beac1902c33cda8.png

勾上一些权限后,即可创建access_token;

ab95ca8935c0d54dc24e8b5a4c55f479.png

6eb1cc4f89475eb65d6ae73a599affe5.png

创建好之后,我们甚至可以直接在gitee的swagger API文档页面在线调试:https://gitee.com/api/v5/swagger#/postV5ReposOwnerRepoContentsPath

有了这么友好的文档,代码实现也就不难了吧。

        /// <summary>/// 码云图床/// </summary>/// <param name="stream"></param>/// <param name="file"></param>/// <returns></returns>public async Task<(string url, bool success)> UploadGitee(Stream stream, string file){string base64String = Convert.ToBase64String(stream.ToByteArray());string path = $"{DateTime.Now:yyyyMMdd}/{Path.GetFileName(file)}";using (var resp = await _httpClient.PostAsJsonAsync("https://gitee.com/api/v5/repos/<用户名>/<仓库名>/contents/" + HttpUtility.UrlEncode(path), new{access_token = "你的access_token",content = base64String,message = "上传一张图片"})){if (resp.IsSuccessStatusCode || (await resp.Content.ReadAsStringAsync()).Contains("already exists")){return ("https://gitee.com/<用户名>/<仓库名>/raw/master/" + path, true);}}return await UploadSmms(stream, file);}

是不是觉得gitee非常适合拿来做图床了呢?真香!

52d60c1508e2877b9ef08ae9a2c6ea55.png

总结

为了防止上传失败,我们可以依次做熔断降级,来达到图床稳定,比如:

如果gitee上传失败,则尝试上传到gaylab,如果gaylab失败,则传到OSS...!

现在又有这么多的图床可以撸了!

最后,附上博主博客的图床客户端完整实现代码:

ldqk/Masuit.MyBlogs​github.com
2d3060f341b1083c798942c62935617c.png

转自原文:

利用gitlab或gitee作为网站免费图床的实现_懒得勤快的博客_互联网分享精神​masuit.com

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

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

相关文章

seo日常工作表_5 個日常要做的 SEO 維護工作

無論如何完美的優化網站&#xff0c;它始終需要不斷地維護。就像是車子一樣&#xff0c;在新的的車運作久了還是需要保養的。也就是說&#xff1a;「SEO 是永無止盡的」有些SEO優化只需要做一次&#xff0c;例如從Http轉移到Https。而其他SEO工作則是需要按照每周或是每月的規劃…

CSDN 未来网站内容Tag架构猜想

大概是上周吧&#xff0c;写了一篇blog主观的分析了一下CSDN目前的内容架构&#xff0c;收到许多朋友好的意见和建议&#xff0c;在此首先对他们表示感谢。网络变化真的很快&#xff0c;现在的网站内容架构较2&#xff0c;3年前已经有翻天覆地的变化。很多人也提出了“如今的网…

自定义服务器网址,小白新手如何在服务器上搭建一个自己的网站

原标题&#xff1a;小白新手如何在服务器上搭建一个自己的网站大家好&#xff0c;本文将带大家一步步从搭建服务器到建立运行一个网站后续会慢慢更新到渗透测试环境的搭建和对服务器网站渗透的步骤流程。本文内容适合于新手学习&#xff0c;大牛请直接绕道需要准备&#xff1a;…

实际采用 FleaPHP 的网站

下面都是采用 FleaPHP 框架开发的网站列表&#xff0c;如果发现无效连接请在留言。如果你有采用 FleaPHP 开发的网站&#xff0c;并且愿意公开网址&#xff0c;可以发邮件到 dualface (at) gmail.com需要提供的信息包括网站名称和连接地址&#xff0c;以及简单的介绍文字。云南…

从“奥运门票网站800万访问量”想到的成本、质量、进度、风险等关系

看到这个新闻后颇有一番滋味&#xff0c;更体验到我一直关注的软件性能着实无处不在&#xff0c;这个案例也确实值得我们好好反思一下。不知道网友们有没有报名参加国际日语考试的——这个网站每年05年前都有人不能报名&#xff0c;因为报名人数太多&#xff0c;所以报名当日大…

SharePoint:扩展DVWP - 第15部分:通过网站栏实现可维护的下拉框

本文的内容对于管理员来说都是些基础的SharePoint操作 &#xff0c;目的是为接下来的DVWP扩展作准备。有经验的读者请略过。 为什么用网站栏实现下拉框&#xff1f; 网站栏可以用在多个地方。当使用查阅项类型的网站栏连接到一个根网站的列表上&#xff0c;可以在整个网站集范围…

郑昀邀请网站开发工程师架构师加盟Web3.0新锐网站[工作地点-北京财智国际大厦]

公司新年新气象&#xff0c;刚刚换到了一个大办公室&#xff0c;也离中关村更近了。随着公司规模的扩大&#xff0c;开始了新一轮的招兵买马&#xff0c;哈哈。请各位帮忙看看有没有合适的人选推荐&#xff0c;不胜感谢&#xff01;招聘:研发部招聘岗位1&#xff1a;PHP网站架构…

提升你网站水平的 jQuery 插件推荐

jQuery是一个优秀JavaScript库&#xff0c;它简化了HTML文档遍历&#xff0c;事件处理&#xff0c;动画和Ajax交互。 jQuery的确改变了很多人写JavaScript的方式。如今&#xff0c;有很多现成的jQuery插件可供选择&#xff0c;帮助你在网站中加入惊人的功能和效果。看看这些非常…

腾讯、网易、新浪新闻网站爬虫编写记录及评论格式分析

0 前言 先说说看这篇博客你能知道什么&#xff1a;1 腾讯、网易、新浪不同新闻的地址格式以及评论内容的地址格式&#xff08;返回数据为json的异步接口&#xff09;&#xff1b;2 一些比较通用的设计方法&#xff0c;对软件设计的菜鸟可能有帮助&#xff1b; 之前也说了要写这…

系统架构----(2)大型网站架构之架构模式

大型网站架构之架构模式什么是模式呢&#xff1f;每一个模式描述了一个再我们周围不断重复发生的问题及问题解决方案的核心&#xff0c;这样你就能一次次重用该方案而不必去做重复的工作&#xff0c;可见模式的关键在于可重复性。网站架构模式的目标&#xff1a;面临高并发访问…

系统架构(1)---单机至亿级流量大型网站系统架构演进

阶段一、单机构建网站网站的初期&#xff0c;我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器&#xff0c;如tomcat、jetty、jboos&#xff0c;然后直接使用JSP/servlet技术&#xff0c;或者使用一些开源的框架如mavenspringstructhibernate、mavenspringspri…

android系统(9)---android工具网站

网站介绍&#xff1a;http://www.androiddevtools.cn/AndroidDevTools收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范&#xff0c;免费的设计素材等。欢迎大家推荐自己在Android开发过程中用的好用的工具、学习开发教程、用到设计…

外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站

外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站之前在CentOS虚拟机上安装了LAMP&#xff0c;搭建起了自己的web服务器&#xff0c;具体流程见&#xff1a; http://www.linuxidc.com/Linux/2012-06/63847.htm但是&#xff0c;在本机访问虚拟机的时候&…

如何能自动上传公众号文章到网站里面!

如何能自动上传公众号文章到网站里面&#xff01; 听语音 |浏览&#xff1a;93|更新&#xff1a;2018-06-09 13:30|标签&#xff1a;网站 微信公众号 1 2 3 4 5 分步阅读 百度经验:jingyan.baidu.com 微信文章一直是各大网站建站是的优质内容&#xff0c;很多站长为了…

智能硬件(1)---十个智能硬件中文网站

十个智能硬件中文网站不论你是智能硬件从业者&#xff0c;还是智能硬件爱好者&#xff0c;不妨统一称之为“智能硬件er”。在信息泛滥的时代&#xff0c;专注于智能硬件&#xff0c;能提供好的资讯、观点、资源的平台屈指可数。雷科技小编为您收集了值得关注的十大智能硬件中文…

天空象棋——网站与用户

上一篇文章《天空象棋——冲上云霄》介绍了如何把天空象棋的算法服务发布到Azure上&#xff0c;以及提供了一个使用该云服务的象棋客户端。这次的任务是为天空象棋在Azure上创建一个网站&#xff0c;并且提供用户注册、登陆的功能。涉及以下知识点&#xff1a; 在Azure上创建网…

网站前端,后端设计,系统设计常识

系统设计第一次课听课笔记 网站分为前端和后端 前端就是大家看到的网站界面&#xff0c;类似美女的外表&#xff1b; 后端就是网站的架构设计&#xff0c;类似美女的内心&#xff0c;肚子里有多少东西&#xff0c;无法直接看出来。 后端工程师很苦逼&#xff0c;网站有问题&a…

大型网站图片服务器架构的演进

在主流的Web站点中&#xff0c;图片往往是不可或缺的页面元素&#xff0c;尤其在大型网站中&#xff0c;几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中&#xff0c;也会历经很多曲折甚至是血泪教训&#xff08;尤其是早期规划不足&am…

拳王虚拟项目公社:如何通过SEO优化分析建网站赚钱?

这几年其实几乎已经很少有人再提起seo这个行业了&#xff0c;也有很多人认为现在已经没有人在用搜索引擎的了&#xff0c;也有一个seo从业者片面的认为pc端的网站优化叫做seo&#xff0c;移动端就不属于seo范畴了&#xff0c;其实聊这些东西本身没有任何的意义。 其实百度的DA…

拳王虚拟项目公社:看懂虚拟资源整合收集,资源网站的盈利玩法

之前有拳友咨询&#xff1a;现在还能通过信息差赚钱吗&#xff1f; 能&#xff0c;这种生意太多了。 举个栗子&#xff1a; 有很多人都充了爱奇艺的VIP会员&#xff0c;因为不付费很多内容都看不了。 在爱奇艺官方平台上&#xff0c;年付的黄金会员价格是178&#xff0c;但…