本文是[链接]的一个章节,该系列文章将介绍 [链接] 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 内置 HTTPS + CDN 文件存储 自 v3.0.0 开始,Solo 内置了 H ..

Solo 内置 HTTPS + CDN 文件存储

本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ❤️

内置 HTTPS + CDN 文件存储

自 v3.0.0 开始,Solo 内置了 HTTPS + CDN 文件存储,用户只需配置好 B3 Key 就可以直接使用,允许上传的最大单个文件为 10M。

背景和动机

早期的 Solo 是支持用户自己配置七牛云、阿里云 OSS 的,随着用户反馈使用情况,我们注意到几个问题:

  1. 需要自行创建、配置第三方对象存储服务,虽然不困难,但对于大部分人来说还是有点繁琐
  2. 要使用第三方对象存储服务的 HTTPS + CDN 是需要付费的

另外,对于使用服务器本地存储我们是不赞成的:

  1. 服务器带宽一般较小,如果要高速渲染图片或下载文件对带宽有一定要求
  2. 自己运维的服务器相对于第三方服务来说不是非常可靠,较容易造成数据丢失
  3. 迁移服务器需要迁移文件图片,这一步运维操作很容易被遗漏

所以我们比较推荐用户使用第三方对象存储服务。但如果每个用户都要去做一次第三方对象存储配置的话不如让社区统一来做一次,这样在整体上是效率最高的,可以在很大程度上方便用户。

使用方式

  1. 在管理后台 -> 工具 -> 用户管理中选择用户并更新 B3 Key
  2. 在社区个人设置 - B3 中更新为和博客端一样的 B3 Key

配置好后博客端就可以通过编辑器直接上传文件或者图片了,数据会被存储在社区维护的七牛云对象存储服务中,并且配置了 HTTPS + CDN。

实现流程

技术方面主要通过浏览器 CORS 实现跨域上传,完整的交互流程请看下图。

1. 获取上传凭证并在本地缓存

sequenceDiagram
    用户浏览器->>+Solo: 访问后台
    alt 缓存的上传凭证没过期
        Solo-->>用户浏览器: 填充模板返回
    else 缓存的上传凭证已过期
        Solo->>+社区: 根据用户名、B3 Key 获取上传凭证(HTTP GET)
        社区-->>-Solo: 返回上传凭证
        Solo->>Solo: 刷新上传凭证缓存
        Solo-->>用户浏览器: 填充模板返回
    end

2. 用户浏览器 CORS 跨域上传

为了简单,只画了正常成功情况的交互,并省略了一些校验处理细节。

sequenceDiagram
    用户->>+浏览器: 上传文件,请求的 URL 为社区文件接口
    浏览器->>+社区: 判断为非简单请求,发起预检(HTTP OPTIONS)
    社区-->>-浏览器: 响应预检,标头 Access-Control-*
    浏览器->>社区: 上传凭证标头 X-Upload-Token 并上传文件
    社区->>七牛云: 上传文件到对象存储服务
    社区-->>浏览器: 返回上传文件的 URL 
    浏览器-->>-用户: 上传完毕,编辑器自动插入文件链接
    

关于 CORS 的更多知识可参考阮一峰前辈的文章:跨域资源共享 CORS 详解

靠爱发电

目前社区的图床服务完全是靠爱发电,所以请大家不要滥用:

欢迎通过社区赞助系统对我们进行支援 💝


回到全文目录:《Solo 从设计到实现》

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    861 引用 • 6548 回帖 • 673 关注
  • 设计
    89 引用 • 618 回帖 • 1 关注
  • 图床
    13 引用 • 64 回帖
  • CORS
    6 引用 • 48 回帖
7 回帖
请输入回帖内容...
  • medusar 2 评论
    展开
    该回帖仅作者和楼主可见
    1 操作
    88250 在 2019-08-10 00:08:24 折叠了该回帖
    调用百度 TTS 接口做的
    88250
    @88250 恩恩,了解了,谢谢
    medusar
  • zhaop33

    图床上上传的图片怎么删除,有接口吗

    1 回复
  • 88250

    内容中不要使用即可。

  • zhaop33

    在社区的文件列表里面能看到

    1 回复
  • 88250

    文件列表只有你自己能看,其他人访问不了的。

  • kenel

    博主,我想用阿里云的 OSS 存储文件,可以下载哪个版本呢?

    1 回复
  • 88250

    如果有自己管理文件存储的需求,可以使用第三方工具管理,博文中插入 URL 引用。

请输入回帖内容 ...