博客搭建-图床篇

news2025/1/9 16:48:12

我们的博客难免少不了图片,图片管理是一个不小的难题。如果我们将图片全部放到我们自己的服务器上,那么带宽就基本上会被图片所占满了,这会导致网站加载很慢(特别是图片加载很慢)。

什么是图床

为了解决图片的问题,市面出现了很多公司,提供图床服务:就是将图片上传到他们的服务器,然后返回一个图片链接给你,这样我们就可以在博客中引用这个图片,我们自己的服务器只需返回前端 HTML 和 JS 等小文件,加载速度很快。并且,图床服务的背后使用了一些 CDN 等技术,可以使得图片的访问速度很快

我们在选择图床的时候,请慎重选择免费图床,毕竟众多免费图床网站注册条款里有禁止商用这一条,哪天关闭了图片外链或者商用,势必给用户带来很大的麻烦,比如我们博客的所有图片突然都看不到了!很多免费图床总是好景不长,因为做图床是要投入的,比如服务器、带宽、人员、技术投资、市场宣传等,完全免费了,这些小站可能自己都难存活,所以总是不能长久使用!

也有人使用 Gitee 作为图床,但 Gitee 突然加上了防盗链功能,导致很多人的博客的图片都失效了:突发,Gitee 图床废了_程序员鱼皮的博客-CSDN 博客

图床的基本术语和常见图床

对于数字和文本类型的数据,比方说名字和电话号码相关的信息,我们通常会用数据库去存储(例如 MySQL、Oracle 等)。

但对于图片这样的文件对象存储层不太可能再用数据库,应该改用专业的对象存储,比如亚马逊的 S3(Amazon Simple Storage Service,简单存储服务,因为是三个 S 开头的单词,所以叫 S3),或者阿里云的 OSS(Object Storage Service)。

在对象存储中,有几个概念需要了解(看不懂就算了…):

  • 桶:可以理解为一个现实生活中的桶,里面存放的就是文件了。可以有多个桶,例如这个桶用来存放图片当作图床用,另一个桶用来存放视频当网盘用等等……

  • 对象:就是一个个文件对象了,这个对象包括三个部分:Key、Data、Metadata。Key: 可以理解文件名,是该对象的全局唯一标识符(UID)。Data 也就是用户数据本体。这个不用解释了。

    Metadata 叫做 元数据 ,它是对象存储一个非常独特的概念。元数据有点类似数据的标签,标签的条目类型和数量是没有限制的,可以是对象的各种描述信息。

    举个例子,如果对象是一张人物照片,那么元数据可以是姓名、性别、国籍、年龄、拍摄地点、拍摄时间等。

    在传统的文件存储里,这类信息属于文件本身,和文件一起封装存储。而对象存储中,元数据是独立出来的,并不在数据内部封装。

    元数据的好处非常明显,可以大大加快对象的排序,还有分类和查找。

目前提供图床服务的有很多:

  • 阿里云:对象存储 OSS_云存储服务
  • 华为云:对象存储服务 OBS 官网
  • 腾讯云:对象存储数据处理_COS 数据处理
  • 七牛云:对象存储 Kodo_云存储
  • 百度云:对象存储 BOS_云存储
  • 网易云:对象存储服务 NOS

对象存储这个技术,不同的云厂商有不同的英文缩写命名。例如阿里云把自家的对象存储服务叫做 OSS,华为云叫 OBS,腾讯云叫 COS,七牛叫 Kodo,百度叫 BOS,网易叫 NOS……五花八门,反正都是一个技术。

在机缘巧合之下,我用过一段时间的七牛云,因此后续也是使用的七牛云了,这里也是以七牛云为例(其他图床的使用方法是类似的)。

七牛云入门

先去官网注册一个账号,然后去, 对象存储 里,添加对象存储功能,新建空间的意思就是新建一个存储空间:

在这里插入图片描述

例如这里我新建了一个空间 vuepresslearn 用来当测试:

在这里插入图片描述

注意,新建的空间只有一个临时域名,如果要长久使用得有一个正式的域名,例如我图床的域名是 image.peterjxl.com:

在这里插入图片描述

然后我们点击文件:

在这里插入图片描述

就可以上传文件了:

在这里插入图片描述

然后点击选择文件,就会弹出选择文件的对话框。是否要上传覆盖按需选择

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?在这里插入图片描述
=https%3A%2F%2Fraw.githubusercontent.com%2FPeter-JXL%2Fgallery%2Fmaster%2Fimage-20230225112115-a61ft1k.png&pos_id=img-FvX7VNOJ-1720342591902)​​

例如我上传了一张图片,上传文件后,就可以获得其访问链接:

在这里插入图片描述

然后访问该链接,就可以看到图片了

在这里插入图片描述

博主本人新建了一个 blog 目录,专门用来存放博客的图片;还创建了其他目录,用来存放其他项目的图片。是否要在空间里创建目录看自己的需求。

绑定域名

七牛云默认提供的测试域名是会过期的,要想长久使用,得绑定一个域名:

在这里插入图片描述

这里我随意输入了一个域名:

在这里插入图片描述

然后就能获取到一个 CNAME:

在这里插入图片描述

然后去到我的域名解析商控制台里(我用的是阿里云),配置这个 cname,参考 如何配置域名的 CNAME - 七牛开发者中心:

这样用户访问的我图片 image.peterjxl.com/1.jpg,就会通过 CNAME 重定向到七牛云的链接上去,然后获取图片。

配置完后,DNS 生效后就可以在域名管理里看到状态是成功的:

在这里插入图片描述

需要注意的是,如果你的存储空间是私有的,那么图片的外链会有很多的参数;例如:

在这里插入图片描述

如果去掉 jpg 后面的参数,是访问不了的,这是七牛云的规则。设置成公有的,图片才不会有这么多参数:

设置完后:

!

使用 HTTPS

由于我的博客使用了 HTTPS,如果图床没有使用的话,会不安全,因此也得加上 HTTPS。

为此,我们需要先购买一个域名证书。由于我之前已经购买过证书了,因此后续有些步骤我仅仅是演示用,没有实际购买等,具体可以参考:博客图床最佳解决方案_隔壁郑同学的博客-CSDN 博客,这里简单提提怎么买。

打开证书管理:七牛云 - 证书管理,点击购买证书

在这里插入图片描述

一般来说选个最便宜即可,我们不是企业型,用不上那么贵的:

然后就可以配置 HTTPS 了:由于我之前已经购买了证书,这里就不继续往下演示了

在这里插入图片描述

图片上传工具

我的博客是基于 Markdown 的,如果我们每次上传图片都需要登录到七牛云控制台并上传,就太慢了。因此市面上出现了很多图片上传工具,能实现的效果是这样的:将图片拖拽到工具里,就能自动上传到对象存储里,并且获取图片链接,极大简化了我们的操作。

目前常见的工具有:

  • PicGo:支持 Windows,Mac 和 Linux,基于 Electron 开发,支持多种图床上传
  • iPic:只支持 Mac

博主使用的是 PicGo,我们先下载,然后打开配置:

在这里插入图片描述

Bucket 就是存储桶的意思,一般就是你新建的空间的名字

访问地址就是绑定的域名

设定存储路径:比如在存储桶里,我还分了几个目录,专门用一个 blog 目录用来存放博客的图床,如果你没有设置,可以不写存储路径

至于怎么配置,可以参考文档:配置手册 | PicGo。至于怎么获取 AK 和 SK(AccessKey 和 SecretKey),要去七牛云 - 密钥管理 里获取,或者在右上角–密钥管理:

获取 AK 和 SK:

在这里插入图片描述

配置完 PicGo 后,就可以实现将图片拖拽上传到图床的效果了,方便了不少:

在这里插入图片描述

Typora + PicGo

由于经常需要上传图片到图床,为了方便我们写文档,Typora(一款 Markdown 编辑器)也在 2022 年集成了 PicGo,可以实现在 Typora 里,对着图片右键,就可以上传图片

还可以批量上传:

在这里插入图片描述

配置方法:打开 Typora 的设置,进入图像选项卡部分:然后设置上传服务即可

在这里插入图片描述

更多可以参考 Typora 官方文档:Upload Images - Typora Support (需科学上网)

上传图片并修改 Markdown 文件

对于我来说,我通常是在一个思源笔记(一个支持 Markdown 语法的笔记软件)里写好文章,然后导出为 Markdown,再上传到博客的,如果博客的图片比较多,那么打开一个个然后逐个上传图片也是很麻烦的……为此博主曾打算自己写一个软件,可以一键将 Markdown 文件里的所有图片都上传到图床,并且自动修改 Markdown 文件里的图片链接,这样 Markdown 文件就可以直接发布到博客上了,非常方便。

但是在动手造轮子之前,先在 GitHub 上搜索了有没人造好了轮子,还真发现了不少… 还好没有自己动手。以下是我搜到的:

  • Markdown 文件图片自动上传七牛云并更新文件:博主目前在用的,直接在 Markdown 文件上右键–upload 即可,非常方便,为此我还特地 fork 项目并加了一些说明,Peter-JXL/foureggs
  • markdown-img-icexmoon · PyPI:文档齐全,一个 Python 包,暂未使用过
  • free-free/iclouder: markdown:支持水印等功能,还未使用过
  • lhui/qiniuClient: 云存储管理客户端:功能齐全,看上去很不错。
  • img-go: Markdown 图片辅助工具 :功能齐全,看上去很不错。

如果你觉得上述的项目都不符合自己的需求,想自己写,也不难,七牛云官方文档里提供了各种编程语言上传文件的接口:直传文件_API 文档

网上也有不少人自己写的:node+express 简单的实现文件上传 到 七牛云存储中 - 掘金

防盗链和白名单

互联网并非一片净土,只有是网站就有被攻击的风险,而被攻击最直接的损失就是金钱和时间上的损失,例如图床是有流量限制的,如果一直有人盗刷,就会造成流量耗尽,图床用不了,可以参考小林 coding 的博客:我的网站第一次被攻击了

为此,我开启了防盗链功能,博客里的图片只能在博客里看到,如果你复制到其他网站上,是看不到的。当然这也有缺点,就是不方便了,比如博主在本地运行博客,也是看不到图片的;并且也不方便其他人转载;

但如果实在想要在其他网站显示你的图床上的图片,可以加白名单,这样就可以显示了(注意白名单还得加上七牛云,不然在七牛云里也看不到图片,为此我还特地提了个工单咨询过 😅,就离谱)

接下来说下七牛云里如何开启防盗链和配置白名单:打开存储空间,然后进入域名管理,然后点击域名管理:

然后在访问控制里就可以配置是否开启防盗链和白名单了:

在这里插入图片描述

开启白名单:

在这里插入图片描述

七牛云日志下载

可以将访问的日志下载下来分析,较少用(我是用来分析防盗链的时候才用到):

下载日志地址:https://portal.qiniu.com/cdn/log

或者通过 API 来下载日志,参考文档:https://developer.qiniu.com/fusion/api/1226/download-the-log

CDN 日志的下载方式,以及日志中字段的含义参考文档:https://developer.qiniu.com/fusion/manual/3847/cdn-log-fusion

GitHub 防盗链的问题

博主曾尝试在 GitHub 上显示七牛云的图片,即使加了白名单也不行;后续经过咨询一些朋友和分析日志,GitHub 获取图片的方式可能是后台直接通过 curl 等工具获取的,因此 refer 是空的,无法通过白名单的方式获取,而 Gitee 的话则加上 Gitee.com 即可,CDN 的日志对比如下:

116.21.31.192 MISS 104 [20/Feb/2023:21:51:50 +0800] "GET https://image.peterjxl.com/TimeRecorder/TimeRecorder-summary.jpg HTTP/2.0" 200 43824 "https://gitee.com/peterjxl/TimeRecorder" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"

140.82.115.62 MISS 1 [20/Feb/2023:21:04:54 +0800] "GET https://image.peterjxl.com/TimeRecorder/TimeRecorder-label.jpg HTTP/1.1" 403 351 "-" "github-camo (325d2008)"

可以看到 GitHub 的 refer 是空的,因此无法在 GitHub 上显示加了防盗链的图床图片。Gitee 没有这样的问题。

解决办法:将图片上传到 Git 项目里,然后 Markdown 文件里引用相对路径即可。

CDN 刷新

七牛云使用了 CDN,也就是缓存,因此如果将旧的图片删除,上传一个新的图片的话,由于缓存没更新,访问的时候还是旧的图片,因此得刷新 CDN 缓存,才能看到新图片。

缓存是有时间期限的,即使不刷新,过一段时间也会自动更新(具体多久得咨询七牛云了)。

刷新方法:打开七牛云 - 刷新预取,然后输入要刷新的文件路径:

在这里插入图片描述

直接刷新整个目录也可以,这样即使目录里的图片超过 500 个,也会全部刷新。

如果刷新后还是看到旧图片,可以尝试更换浏览器看看是否因为缓存问题。

参考:刷新预取_使用指南_CDN - 七牛开发者中心

图片压缩

太大的图片,不仅会影响加载速度,也会使得网站流量变大。

为此,有必要在上传图片之前,先自行确认下图片的大小,我的建议是:超过 1M 的图片都压缩一次。

此外,还可以在七牛云后台看到最耗费流量的图片:CDN → 统计分析 → 日志分析 → TOP URL/IP

​

通过这个步骤,可以看到最耗费流量的前几个图片,然后进行压缩,重新上传,能极大地缓解网站压力,提高用户体验。

注意,上传图片后得刷新 CDN 缓存,否则还是会用到旧图片的。具体步骤:去到文件管理,搜索该图片,然后右键 → 更多 → 刷新 CDN 缓存

那么,如何压缩图片呢?这个就各显神通了。我个人用的工具是一个在线网站:tinypng.com,完全免费,可以批量压缩 20 张图片,最大 5MB。

该网站还提供了:

  • API ,开发者可以调用它来为自己的产品提供图片压缩服务,但每月只能调用 500 次。
  • Mac 的桌面端工具 TinyPNG4Mac,开源在 GitHub,可以压缩超过 5M 的图片。

在这里插入图片描述

也试过很多国内的工具,但基本都是收费的。收费也有收费的好处,功能更多,支持更大的图片。

  • pdf365压缩:pdf365.cn/img-compress
  • 福昕压缩大师:www.foxitsoftware.cn/shipinyasuo
  • docsmall:docsmall.com/image-compress

对我来说,免费的够用了。

使用 webp / avif 格式

webp 和 avif 格式比起传统的 jpg 格式体积更小,也是目前非常主流的图片格式。

WebP 使用了更优的图像数据压缩算法,能带来更小的图片体积。例如微信文章里的很多图片都是 webp 格式,例如我随机保存一张图片:

在这里插入图片描述

avif 格式压缩的更厉害,体积更小。我们在访问 B 站的时候就可以看到它用的图片都是 avif 格式了:

但是这两种格式得考虑兼容性问题,读者可以去 caniuse.com 搜索各大浏览器的兼容情况。

感兴趣的同学可以看看这几篇博客:

  • WebP 相对于 PNG、JPG 有什么优势? | 张洪Heo
  • 实现全站图片使用avif格式,替代臃肿的webp教程 | 张洪Heo

小结

如果遇到什么使用上的问题,可以电话咨询七牛云;如果是什么技术上的问题,可以发工单:

在这里插入图片描述

如果你使用 GitHub Pages 或者 Gitee Pages,那么直接使用 Git 项目作为图床也是可以的。

参考

  • 对象存储,为什么那么火? - 知乎
  • 博客图床最佳解决方案_隔壁郑同学的博客-CSDN 博客
  • 四知回–Markdown 文件图片自动上传七牛云并更新文件_子午僧的博客-CSDN 博客
  • 我的网站第一次被攻击了

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

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

相关文章

ansible常见问题配置好了密码还是报错

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解决&#xf…

计算两种人像之间的相似度

通过调研,目前存在几种能够计算两个人脸相似度的方法: 1.使用结构相似性计算人脸之间的相似度 结构准确性:生成的图片是否保留了原图足够多细节。 (1)结构准确性衡量指标:SSIM/MMSSIM SSIM(结构…

昇思MindSpore学习笔记5-01生成式--LSTM+CRF序列标注

摘要: 记录昇思MindSpore AI框架使用LSTMCRF模型分词标注的步骤和方法。包括环境准备、score计算、Normalizer计算、Viterbi算法、CRF组合,以及改进的双向LSTMCRF模型。 一、概念 1.序列标注 标注标签输入序列中的每个Token 用于抽取文本信息 分词(Word Segment…

3-5 提高模型效果:归一化

3-5 提高模型效果:归一化 主目录点这里 举例 1. 批量归一化 (Batch Normalization, BN) 应用场景: 通常用于图像分类任务,它在训练期间对每个批次的数据进行归一化,以加速收敛并稳定训练过程。 代码示例: import torch import torch.…

【实践分享】深度学习远程连接GPU

目录 前言 一、创建实例 二、上传文件 三、服务器上传 四、运行代码文件 前言 1、使用平台:恒源云 2、教程总结自B站大佬Larry同学发布的教程视频 一、创建实例 通俗:租用一台临时的电脑,电脑可自选GPU型号等,按照项目需…

Linux基础:一. 简单的命令

文章目录 一. 简单的命令1.1 关机1.2 重启1.3 控制台打印工作目录1.4 切换当前目录1.5 列出当前目录中的目录和文件1.6 列出指定目录中的目录和文件1.7 控制台清屏1.8 查看和设置时间1.8.1 查看时间1.8.2 设置时间,需要管理员权限 一. 简单的命令 1.1 关机 comman…

FairJob:促进在线广告系统公平性研究

在人工智能(AI)与人类动态的交汇处,既存在机遇也存在挑战,特别是在人工智能领域。尽管取得了进步,但根植于历史不平等中的持续偏见仍然渗透在我们的数据驱动系统中,这些偏见不仅延续了不公平现象&#xff0…

PingCAP 成为全球数据库管理系统市场增速最快的厂商

近日,Gartner 发布的《Market Share Analysis: Database Management Systems, Worldwide, 2023》(2024 年 6 月)报告显示:“2023 年全球数据库管理系统(DBMS)市场的增长率为 13.4%,略低于去年的…

排序 -- 计数排序以及对排序的总结

到了这篇文章就说明常见的排序我们就快要讲完了,那这篇文章我们就讲一下非比较排序--计数排序。 一、非比较排序 1.基本思想 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 操作步骤: 统计相同元素出现次数 根据统计的结果将序列…

LaTeX教程(014)-LaTeX文档结构(14)

LaTeX教程(014)- LaTeX \LaTeX LATE​X文档结构(14) 2.3.3 multitoc - 将目录设置为多栏 multitoc包的使用方法相当简单,只需要调用这个包,并将要设置为多栏(默认是双栏)的目录指定到包选项中即可。如\usepackage[toc]{multitoc},设置的就是…

25_嵌入式系统总线接口

目录 串行接口基本原理 串行通信 串行数据传送模式 串行通信方式 RS-232串行接口 RS-422串行接口 RS-485串行接口 RS串行总线总结 RapidIO高速串行总线 ARINC429总线 并行接口基本原理 并行通信 IEEE488总线 SCSI总线 MXI总线 PCI接口基本原理 PCI总线原理 PC…

jmeter-beanshell学习4-beanshell截取字符串

再写个简单点的东西,截取字符串,参数化文件统一用csv,然后还要用excel打开,如果是数字很容易格式就乱了。有同事是用双引号把数字引起来,报文里就不用加引号了,但是这样beanshell处理起来,好像容…

MATLAB中的SDPT3、LMILab、SeDuMi工具箱

MATLAB中的SDPT3、LMILab、SeDuMi工具箱都是用于解决特定数学优化问题的工具箱,它们在控制系统设计、机器学习、信号处理等领域有广泛的应用。以下是对这三个工具箱的详细介绍: 1. SDPT3工具箱 简介: SDPT3(Semidefinite Progra…

Nacos服务注册总流程(源码分析)

文章目录 服务注册NacosClient找看源码入口NacosClient服务注册源码NacosServer处理服务注册 服务注册 服务注册 在线流程图 NacosClient找看源码入口 我们启动一个微服务&#xff0c;引入nacos客户端的依赖 <dependency><groupId>com.alibaba.cloud</groupI…

Science Robotics 麻省理工学院最新研究,从仿真中学习的精确选择、定位和抓放物体的视触觉方法

现有的机器人系统在通用性和精确性两个性能目标上难以同时兼顾&#xff0c;往往会陷入一个机器人解决单个任务的情况&#xff0c;缺乏"精确泛化"。本文针对精准和通用的同时兼顾提出了解决方法。提出了SimPLE(Pick Localize和placE的仿真模拟)作为精确拾取和放置的解…

C# 如何获取属性的displayName的3种方式

文章目录 1. 使用特性直接访问2. 使用GetCustomAttribute()方法通过反射获取3. 使用LINQ查询总结和比较 在C#中&#xff0c;获取属性的displayName可以通过多种方式实现&#xff0c;包括使用特性、反射和LINQ。下面我将分别展示每种方法&#xff0c;并提供具体的示例代码。 1.…

【Spring Cloud】一个例程快速了解网关Gateway的使用

Spring Cloud Gateway提供了一个在Spring生态系统之上构建的API网关&#xff0c;包括&#xff1a;Spring 5&#xff0c;Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的路由方式&#xff0c;并为它们提供一些网关基本功能&#xff0c;例如&…

轻松驾驭开发之旅:Maven配置阿里云CodeUp远程私有仓库全攻略

文章目录 引言一、为什么选择阿里云CodeUp作为远程私有仓库&#xff1f;二、Maven配置阿里云CodeUp远程私有仓库的步骤准备工作配置Maven的settings.xml文件配置项目的pom.xml文件验证配置是否成功 三、使用阿里云CodeUp远程私有仓库的注意事项 引言 在软件开发的世界里&#…

【Linux进程】命令行参数 环境变量(详解)

目录 前言 1. 命令行参数 什么是命令行参数? 2. 环境变量 常见的环境变量 如何修改环境变量? 获取环境变量 环境变量的组织方式 拓展问题 导入环境变量 3. 本地变量* 总结 前言 在使用Linux指令的时候, 都是指令后边根命令行参数, 每个指令本质都是一个一个的可执行程…

数学系C++ 排序算法简述(八)

目录 排序 选择排序 O(n2) 不稳定&#xff1a;48429 归并排序 O(n log n) 稳定 插入排序 O(n2) 堆排序 O(n log n) 希尔排序 O(n log2 n) 图书馆排序 O(n log n) 冒泡排序 O(n2) 优化&#xff1a; 基数排序 O(n k) 快速排序 O(n log n)【分治】 不稳定 桶排序 O(n…