我的图床解决方案,超详细!

2023-11-20

图床就是将你的本地图片上传到相关服务商或者个人服务器,然后获取图片对应的网络访问地址,使用者可以方便快速的将图片插入到文章中,后续图片二次使用、迁移、分享都会非常简单。

我之前常用的图床方案是使用Gitee的仓库来实现,我的博客[1]、周刊[2]以及一些开源电子书都用的是Gitee

最近,Gitee的流量审查机制锁定了我的账户,于是我的历史图片全部都无法访问了,虽然有些无奈,但我在用的时候就做了心理准备,毕竟算是违规使用其仓库资源,所以接下来将详细说下我的图床替代方案选择之路。

我对图床的基础要求就两点:稳定&速度,所以不论免费收费我都会考虑,最终得到以下方案分享给大家:

  • Github + JsDelivr

  • OSS + CDN 

    • 付费:腾讯云 COS

    • 免费:Backblaze + Cloudflare

  • VPS 自建

✨ Github + JsDelivr

Github的图床思路和Gitee是一样的,但是就目前个人使用体验来说,Github的稳定性是更胜一筹的,所以我的图床一出问题,我就快速切换到这个方案应急。

配置起来也还是很方便(默认你会使用 Github),首先新建一个公开仓库:

ff56e72da0957d4e845ff3b49a38ae1b.png
github_pic_demo_01

一般上传一张图片到仓库之后,就已经可以当做图床使用,如:

  • 图片上传后仓库地址:https://github.com/howie6879/oss/blob/master/images/wechat_howie.png

  • 其他用户可访问地址:https://raw.githubusercontent.com/howie6879/oss/master/images/wechat_howie.png

  • 引入 JsDelivr 加速地址:https://cdn.jsdelivr.net/gh/howie6879/oss/images/wechat_howie.png

上面同一张图片,地址的变化大家可以都点进去看看,上面说的操作都是我人工将图片上传,但是实际操作中大可不必,有很多好用的工具来自动帮我们做这件事,这里我推荐两款工具:

  • PicGo[3]:一个用于快速上传图片并获取图片链接的跨平台工具

  • uPic[4]:功能和上面一样,纯 macOS 系统支持,所以在 mac 下面交互体验比上面流畅不少,还有对应移动端 APP

上面两款工具使用方式都是一样的,针对Github做图床都需要获取token供第三方图床工具使用。

点击token 获取链接[5],权限需要勾选repouser

7563faff0d24fd4e737504269741b7c9.png
github_pic_demo_02

随后在图床工具里面进行相关信息配置即可:

349d4a3c9a9ecd6168a029ac2ff8585a.png
github_pic_demo_03

至此,Github + JsDelivr方案的配置使用介绍完毕,总的来说,这个方案还是比较推荐的,理由如下:

  • 快速方便:只需要建立仓库配置一下接口

  • 稳定,毕竟大厂商(但需要注意的是Github图片仓库过大的时候记得换仓库)

  • JsDelivr解决Github在国内访问慢以及流量问题

OSS + CDN

OSS(Object Storage Service)即对象存储服务,各大厂商都有对象存储服务,如腾讯的COS、阿里的OSS、华为云的OBS等。

如果你对图床的稳定性以及速度有比较高的要求,那么可以考虑这套方案,OSS的话,有免费的,也有付费的,CDN也是如此。

不过目前基本各大厂商都有免费额度,没有也没关系,我们博客访问量小的话每月基本上不花什么钱,我现在将笔记全部托管到COS且多平台同步,每月也才几毛钱。

腾讯云 COS

接下来我将用腾讯云COS&CDN服务为例,实现个人图床,其他厂商也是类似套路,就不过多介绍。

首先进入腾讯云 COS 存储桶列表[6],点击创建存储桶

92b44209d9d76d0e52d40adc351c36cb.png
cos_pic_demo_01

需要注意的是访问权限,切记选择私有读写,不允许公共访问里面的文件,为的是恶意访问的时候能减少损失。按照上图配置完成后,直接下一步就创建成功了。

为了保证安全性,这里不建议使用根用户直接进行访问,我们可以创建一个子用户来做相关写入操作。

点击新建子用户[7],按照下图依次填写即可:

选择类型

44c1d831af6aecd65499e06171dd9339.png

填写用户信息

5ee7f820a5d9cea3fb445f146aea4319.png

需要进行验证才能继续。

设置用户权限

148f9c2208a95fa68b8515e7df959dfb.png

什么都不用选择,直接继续。

审阅信息和权限

b2afc043aadf13c01b23703980f07b48.png

完成后会显示该子用户的SecretIdSecretKey,将它们复制出来备用。

注:如果忘记保存,可前往用户列表->目标用户->API 密钥进行获取

为桶设置子账户

回到存储桶列表[8],点击之前创建的存储桶,点击左侧的权限管理-->存储桶访问权限,然后点击存储桶访问权限-->添加用户,子账号权限设置如下:

b0b6bf017aa6bffe92a1e39fa057fc1f.png
cos_pic_demo_02

至此,图床算是配置完毕,打开图床工具,将子用户的SecretIdSecretKey和相关信息录入:

e8771905a798b4f18b717192c0d66dc0.png
cos_pic_demo_03

可随便上传一张照片进行测试,然后打开桶列表下面的文件列表,可看到上传的照片:

a9370f49b2f3416c3970dd79b9bd46a5.png
cos_pic_demo_04

上传后图片的访问地址是:https://images-***.cos.ap-guangzhou.myqcloud.com/uPic/tCyEU0.png,但是为了防止恶意访问以及节省流量费所以我设置了私有访问,因此访问图片会提示Access Denied

最后直接开启CDN域名加速:

344bf138aef6683ad7e6428c0034c814.png
cos_pic_demo_05

为了节省流量的费用,可以考虑在鉴权配置那设置缓存时间为一年,以及Referer名单限制访问源。

Backblaze + Cloudflare

这个方案有以下优势:

  • 每月前 10G 流量免费

  • Cloudflare 做 CDN 加速

  • 可自定义域名

开始前,你需要有以下条件:

  • 域名

  • Backblaze 账户

  • Cloudflare 账户: 按照网站提示接入域名即可

Backblaze B2[9] 是一个云存储解决方案,为什么选用他呢,是因为其前 10G 存储是完全免费的,这用于做图床是非常够用的。

请先注册一个账号(输入邮箱就行),然后点击Create a Bucket,创建一个存储桶:

95812c59460c114c3e7fd7df1cb650aa.png
b2_demo_01

填写名称,记得选择Public权限:

37da540d89d3d07b5a78db8fd0300c96.png
b2_demo_02

为了让第三方软件可以使用backblaze,接下来需要获取Application Keys,操作如下:

  • 点击 App Keys

  • 点击 Application Keys

  • 填写信息进行创建

4fd38234f8d668ea0c6c06dc15aefcb9.png
b2_demo_03

当密钥创建成功,记得保存下来,因为页面关闭后就自动不再展示。

为了获取桶域名,点击Browse Files直接上传一张图片,上传成功后直接点击图片,会看到如下信息:

4a2e10aba35f769e841ee467dcd4669f.png

提取其中Friendly URL显示的域名信息,比如我这里是:https://f***.****.com/,然后在 Cloudflare 解析:

5659ec8cd9887d9e45d5a5eeed7bdc6b.png

如果上一步没有添加成功,直接在域名下面的DNS设置解析:

5d4409afbe0f4270f95b523fb27dc996.png
b2_demo_06

接下来点击左侧的SSL/TLS,设置**完全(严格)**模式:

34aa0613789b8080d30506e6fc951627.png
b2_demo_07

最后在规则页面设置如下两个规则:

ce89bff48200f6c06716f7cdb3ea0cab.png
b2_demo_08

还有一些配置需要在Backblaze进行设置,由于其默认不缓存,我们要先将Bucket SettingsBucket Info添加以下配置:

{"cache-control": "max-age=43200000"}

然后在CORS Rules里面设置Share everything in this bucket with all HTTPS origins即可。

最后,你就拥有了一个自定义域名的免费图床:

3b049e3e8b2c0fd1d4b467879b46910e.png
b2_demo_09
# 地址形式如下
https://img.turingark.com/file/howie-img/wechat_howie.png

你也同样可以用uPic图床工具进行上传:

444f6b57d0a2220aa15495b263440df8.png
b2_demo_10

VPS 自建

如果你手头有服务器,那么可以考虑自建图床服务,市面上可选的图床工具还是有不少的,这里我选择lsky-pro[10]进行尝试,探索自建图床的可行性。

其实开源图床项目挺多的,目前看lsky-pro项目更新以及功能都算前列,而且可以选择将图片上传到腾讯云 COS 或者 b2,因此直接选用其进行测试。

部署上手使用非常简单,直接用Docker 部署[11]即可,具体流程参考这个项目即可,最终效果如下:

7e078fded9fb68406acb4f851014397a.png
vps_lsky_01
75772e5d6188852092e26777be335219.png
vps_lsky_02

可以设置登录才能上传,做到权限管控。

可以设定图片存储在下图任一位置:

3782182b5438d1099cf687b3c546ddc5.png
vps_lsky_03

经过测试,使用起来还是非常方便的,最后正式使用的话建议给自己域名套上一层 CDN,这块可由你自己选择把控。

说明

文中提到的方案都是笔者亲自试验踩坑记录而成,基于稳定&速度这两个前提,因此不考虑第三方图床工具,基本上是借用成熟的服务进行图床搭建,当前应该算是基本覆盖了市面上的图床方案,当然,若有更好的方案欢迎各位留言补充。

若非要我推荐一个快速简单可用的方案,我会选择Github + JsDelivr,如果想自定义域名的话,我推荐Backblaze + Cloudflare,如果想一劳永逸且有钱,那就直接上大厂的 OSS 服务即可。

PS: 如果想交流图床这块的解决方案,公众号右下角有我微信,也可以直接搜索【Howie6879】加我。

本文相关参考资料如下:

  • 如何使用腾讯云 COS+CDN 搭建一个属于自己的图床[12]

  • Free Image Hosting With Cloudflare Transform Rules and Backblaze B2[13]

  • 使用 Backblaze B2 和 Cloudflare Workers 搭建免费的自定义域名图床[14]

参考资料

[1]

我的博客: https://www.howie6879.cn/

[2]

周刊: https://weekly.howie6879.cn/

[3]

PicGo: https://github.com/Molunerfinn/PicGo

[4]

uPic: https://github.com/gee1k/uPic

[5]

token获取链接: https://github.com/settings/tokens/new

[6]

腾讯云COS存储桶列表: https://console.cloud.tencent.com/cos/bucket

[7]

新建子用户: https://console.cloud.tencent.com/cam/user/create

[8]

存储桶列表: https://console.cloud.tencent.com/cos/bucket

[9]

Backblaze B2: https://www.backblaze.com/b2/cloud-storage.html

[10]

lsky-pro: https://github.com/lsky-org/lsky-pro

[11]

Docker部署: https://github.com/HalcyonAzure/lsky-pro-docker

[12]

如何使用腾讯云COS+CDN搭建一个属于自己的图床: https://r2wind.cn/articles/20211214.html

[13]

Free Image Hosting With Cloudflare Transform Rules and Backblaze B2: https://www.backblaze.com/blog/free-image-hosting-with-cloudflare-transform-rules-and-backblaze-b2/

[14]

使用 Backblaze B2 和 Cloudflare Workers 搭建免费的自定义域名图床: https://blog.meow.page/archives/free-personal-image-hosting-with-backblaze-b2-and-cloudflare-workers/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的图床解决方案,超详细! 的相关文章

随机推荐

  • 03LinuxC线程学习之线程共享和非共享

    1 线程共享和非共享 1 1 线程共享资源 1 文件描述符表 由于线程间共享进程间的内容 而文件描述符表在主线程的PCB当中 各个线程可以直接去请求访问 所以线程间通信就不需要像进程那样通过管道这些方式通信 2 每种信号的处理方式 即当某个
  • js解决浏览器,SpeechSynthesis不能正常合成中文语音

    工作中遇到 浏览器不能合成语音 解决思路 合成失败时 循环合成列表 找到能正常合成的为止 对于一直不能合成的浏览器 设置开关 关闭循环功能
  • 服务器系统安装蓝牙驱动,安装蓝牙设备 - Windows drivers

    安装蓝牙设备 05 29 2020 本文内容 重要 本主题面向程序员 如果你是遇到蓝牙设备安装问题的客户 请参阅 在 Windows 中配对蓝牙设备 蓝牙配置文件驱动程序有两种安装类型 远程设备的 客户端安装 远程设备在该远程设备上公布其服
  • vc6.0 c语言加油站,第2章 C语言初探:4、在VC6.0下运行C语言程序

    不管你是否决定使用C Free 都建议阅读 在C Free下运行C语言程序 文中讲到了几个重要概念 对初学者大有裨益 Visual C 6 0简称VC或者 VC6 0 确实有点老了 在XP Win7下都可能会存在兼容性问题 在Win8下根本
  • 图解GitHub和SourceTree入门教程

    http blog csdn net collonn article details 39259227
  • 想去游戏公司做游戏,最重要的是什么素养?

    首先 要学会沟通 话说 动过去游戏公司的念头 做游戏 感觉很酷 但是 想想自己一不会编程 二不会画画 做策划 那好像是两边受气里外不是人出事第一个背锅的角色 想想也就想想 不过正好前些天我们发过一篇讲去日本学游戏的文章 说不定能派上用场 前
  • 华为OD机试真题- 学校的位置【2023Q1】【JAVA、Python、C++】

    题目描述 为了解决新学期学生暴涨的问题 小乐村要建所新学校 考虑到学生上学安全问题 需要所有学生家到学校距离最短 假设学校和所有的学生家 走在一条直线上 请问 学校要建在什么位置 能使得学校到各个学生家的距离之和最短 输入描述 输入的第一行
  • sql语句中的空值(null)

    含null值的表达式都为null null null 在判断某个数是否为null的时候不是用等号来表示 而是用 is null 在过滤的时候 可以使用in null 但是使用not in null的时候会报错 因为in函数 是指满足里面的情
  • java入门的第一个程序代码 hello world

    很多人说 学Java真的很难 其实 这是真的 但是高薪之所以为高薪 就是因为它比普通的活难的多 今天是我第一篇的博客 我还是想鼓励想学java技术的小伙伴一起来学 很多事只有去做了 你才能知道自己能不能成功 好了 接下来看Java入门的第一
  • 网易云音乐财报解读:收入大增亏损收窄,“云村”草长莺飞

    独家版权时代结束后 在线音乐产业进入了新的发展阶段 各家音乐平台经营状况备受关注 2月23日 网易云音乐公布了2022年全年财务业绩 财报显示 网易云音乐2022年全年收入为90亿元 较2021年同比增长28 5 值得一提的是 得益于盈利能
  • 数组的一些简单操作,列表改数组,数组合并,数组存取

    数组的简单操作 总用的一些操作 记录一下 要不总忘 1列表改数组 import numpy as np a 1 2 3 4 a np array a 输出a array 1 2 3 4 2数组合并 延竖轴拼接数组 aa np vstack
  • hive中取最大值最小值的函数

    max 和min 函数 select a max b from t group by a select a min b from t group by a max和min函数是取某一列中的最大或者最小值 greatest 和least 函数
  • R数据科学-第九章使用lubridate处理日期和时间

    本章将会使用以下三个包 gt library tidyverse gt library lubridate gt library nycflights13 一 创建日期或时间 表示日期或时间的数据有三种 日期 在tibble中显示为date
  • C#学习笔记 事件

    事件为委托提供了一种发布 订阅机制 声明事件的类被称为发行者类 其他类可以订阅发行者类中的事件 当发行者类触发其中的事件时 所有订阅该事件的类都会收到这个变化 在图形界面框架中 这种情况非常常见 事件发布者 首先需要创建一个事件发布者类 该
  • python自动化笔记(十一)——openpyxl之封装

    封装一个可以读取任意excel文件的方法 可以指定读取的表单 当我们多次从excel中读取数据时 就不用重复地写代码 只需调用封装的类即可 一 封装的excel类实现的需求是什么 1 读取表头数据 2 读取表头以外的所有数据 返回值 列表
  • DHCP的配置(以华为eNSP为例)

    如有错误 敬请谅解 此文章仅为本人学习笔记 仅供参考 如有冒犯 请联系作者删除 基础知识介绍 络组建步骤 1 拓扑设计 2 IP地址规划 按照拓扑中划分的 络范围 规划 络位不同的IP地址 3 配置 1 配置各个节点的IP地址 2 路由 全
  • qbytearray的append是浅拷贝还是深拷贝_前端深拷贝和浅拷贝

    在前端攻城狮的工作实际应用中 有很多情况下在处理数据的时候 会用到数据的深拷贝和浅拷贝 例如 vue中数据是双向绑定的 页面显示依赖于从后台获取到的数据 但要将这个数据当做参数发送给另外一个接口的时候 其中有几个字段是多余的 此时 如果将原
  • 时间序列 R 07 时间序列分解 Time series decomposition

    一个时间序列可以分解为多个模型的组合 1 1 时间序列的组成 1 1 1 时间序列组成模式 三种时间序列模式 不计剩余残差部分 1 趋势Tend 比如线性趋势 先增加后降低的整体趋势 2 季节性Seasonal 以时间为固定周期 呈现循环的
  • IT项目管理个人作业8

    质量标准 量度 学历 博士以上 教学经验 5年以上 论文发布 10篇以上 逻辑表达能力 思路清晰 讲话清楚 性格 耐心 热情 同行评价 良好及以上 画出QQ图 因为数据量太少 可以推测它是符合正态分布的
  • 我的图床解决方案,超详细!

    图床就是将你的本地图片上传到相关服务商或者个人服务器 然后获取图片对应的网络访问地址 使用者可以方便快速的将图片插入到文章中 后续图片二次使用 迁移 分享都会非常简单 我之前常用的图床方案是使用Gitee的仓库来实现 我的博客 1 周刊 2