Article

关于图片储存的那些事

作者在2024年2月13日对之前的文章进行了修订,讨论了个人博客由于资金问题转向静态博客后,遇到的静态资源存储问题。文章评估了多个公共图床,如SM.MS、聚合图床、路过图床、去不图床、有图床、Bilibili图床、Github+JSDelivr、NPM+各种NPM镜像、图片缓存等。作者分享了不同图床的优缺点和适用场景,并提供了部分代码示例。文章还提及了一些比较便宜的云服务商,如多吉云、缤纷云s4、CloudFlare R2和BackBlaze。作者建议进行多端备份以确保图片不会丢失,表示会继续更新文章以分享更多优秀的白嫖资源。

技术发布于·更新于
#对象储存#白嫖#原创
Time Capsule

本文最后更新于 1 年 2 个月

文中涉及的技术方案、API 或最佳实践可能已经发生演变。

序言H1#

自上次搬运了CYF的文章之后,再次谈及文件储存,也已经是一年多以后了

嗯。现在是2024213日,回档文章时顺便对于此过时文章进行修订。

为什么要突然谈及关于这方面的事情呢?其实最主要的原因还是因为个人的动态博客因为资金问题停止运营 苦逼中学生 从而转向了我之前以为技术问题而抛弃的静态博客,至少现在GitHubGitHubPagesVercel还是免费的,然鹅这就引发了一个非常严重的问题,我的静态资源扔到哪?

有关于图片的存储和调用,在每个前后端分离的博客程序都是需要去解决的问题,虽然我当前使用的Mix-Space拥有储存静态文件的功能,但限于后端服务器的带宽和储存问题,我还是需要去寻找一个比较合适的静态文件的储存方法

网上所给出的JSDelivr+GitHub当做图床,我个人表示jsd是用来加速静态资源的不错,但是过度的滥用反而会导致出现问题 目前JSDelivr完全寄了,滥用能不能趣亖①亖

虽然关于JSDelivr had lost their ICP license的风波已经过去了一段时间,且jsd在国内又可以正常访问了,但是其速度还是不如之前快了,所以用其加速下cssjs之类的文件速度还算可观,但是我这种一张图就将近500KB的人来说,全文使用jsd是不太可取的

我这篇文章还是仿照下CYF大佬的格式简单讲下现在的公共图床罢

注意,本站大多图片经过Shiro反代,速度是Vercel的速度,请将图片在新标签页中打开以测试速度

公共图床H1#

SM.MSH2#

任何一篇讲图床的文章绕不开的就是sm.ms,它真的算是太知名了()

但我给出的评价是

上传速度慢、访问速度慢

原图大小:518KB

这个图床也算是彻底死了,别问我为什么图能加载出来,这走的图片反代()

呦呵,又活了,但是裸访问图片直链会被重定向到图片页面(

感觉好像不太稳定,我个人不太推荐

聚合图床H2#

这个图床访问速度还是挺可观的,也算是我用的最早的图床,但是访问它的的图片还要经过重定向,我个人是不太喜欢的

原图大小:1.77MB

路过图床H2#

路过图床,tos中明确规定**卡通漫画(包括ACG/二次元/动漫游戏等);**是违规内容

原图大小:4.96MB

去不图床H2#

杜老师运营的图床,没有免费套餐,需要付费,使用多吉云融合cdn

俺就不放图了,没得资金评测(

有图床H2#

zkeq大佬运营的图床,压缩感觉有点严重,使用多吉云融合cdn

原图大小:88.1KB(图都快压缩没了!原图143KB)

没有技术力的白嫖H1#

bilibiliH2#

原图大小:405KB

哔哩哔哩的图床,速度快上传快,缺点就是防盗链

看自己喜好了,加载速度都很可观

可以搭配sw使用,疑似有些特殊的B站链接并没有防盗链来着

javascript
// 对数组内所有地址进行请求,返回第一个成功的请求结果并打断其他请求
const 并发请求 = async (urls, url) => {
    let controller = new AbortController()
    const PauseProgress = async (res) => {
        return new Response(await res.arrayBuffer(), {
            status: res.status,
            headers: res.headers,
        })
    }
    if (!Promise.any) {
        Promise.any = function (promises) {
            return new Promise((resolve, reject) => {
                promises = Array.isArray(promises) ? promises : []
                let len = promises.length
                let errs = []
                if (len === 0)
                    return reject(new AggregateError('All promises were rejected'))
                promises.forEach((promise) => {
                    promise.then(
                        (value) => {
                            resolve(value)
                        },
                        (err) => {
                            len--
                            errs.push(err)
                            if (len === 0) {
                                reject(new AggregateError(errs))
                            }
                        },
                    )
                })
            })
        }
    }
    return Promise.any(
        urls.map((urls) => {
            return new Promise((resolve, reject) => {
                fetch(urls, {
                    signal: controller.signal,
                })
                    .then(PauseProgress)
                    .then((res) => {
                        if (res.status  200 || res.status  304 || res.status == 404) {
                            controller.abort()
                            resolve(res)
                        } else {
                            reject(res)
                        }
                    })
                    .catch((e) => reject(e))
            })
        }),
    )
}
// 网络请求处理函数
if (req.url.includes('hdslb.com')) {
    // 获取路径
    const path = req.url.replace(/(https|http)?:\/\/(.[^/]+)/, '')
    const 站点镜像源 = [
        `https://i0.hdslb.com`,
        `https://i1.hdslb.com/`,
        `https://i2.hdslb.com/`,
        `https://s1.hdslb.com/`,
        `https://s2.hdslb.com`,
        `https://s3.hdslb.com/`,
    ]
    for (var i in 站点镜像源) {
        站点镜像源[i] += path
    }
    return 并发请求(站点镜像源)
}

叔叔有钱

可以搭配PicGo使用,有现成的插件

Github+JSDelivrH2#

网上的教程已经泛滥成灾了,就不必说了

羊毛从羊身上长出来,你得这里怼着一只羊使劲薅羊毛,把羊薅死了就没那么好的羊让你薅了

谢邀已经薅死了

NPM+各种NPM镜像H2#

CYF大佬写了详细的教程:点击查看文章

我也不多过于赘述了

反正我的博客的图源就是b2桶和NPM来回切

现在也可以走npmmirror.com的解包服务,速度也还算行

因为某些特殊的原因这个服务被取消了

图片缓存H2#

之前有一段时间也是用这个解决图片问题的,我个人喜欢images.weserv.nl提供的服务,这个服务商提供了非常丰富的图片后处理方法

原图大小:284KB

Alist/Cloudreve+各类网盘H2#

怪,但是能用,需要有自己的服务器(

这里只提供一个解决方案

比较便宜的云服务商H1#

多吉云H2#

多吉云免费套餐10gb内免费,多出10gb的部分每gb每天0.003cny

但是支持第三方上传的标准版是不支持10gb免费套餐的

顺便吐槽下多吉云对象储存这个上传真的是太蛋疼了,我就不上预览图了,图片加载速度可以参考去不图床和有图床

应该是不记请求数的

缤纷云s4H2#

根据评论20241124日修订:

免费流量已经从初测的100GiB削减到了50GiB

免费桶出口流量从20GB削减到了10GB

免费桶请求次数依旧是10万次

免费CDN流量削减到了10GB

有必要注意一下的是S4 请求费 S4 回源请求费 免费额度为各自独立的 10万次/

可以详见存储费用 - 缤纷云文档

CloudFlare R2H2#

目前博主使用的是CloudFlare R2 的方案

速度详细可以看下面这张图

不记下行带宽且每月1000wb类操作(即下载操作,当 Cloudflare R2 缓存命中(cache hit)后访问图片时,仍然会计入 B 类操作。)

可以详见Pricing | Cloudflare R2 docs

BackBlazebH2#

可以去看看我转载CYFan大佬的 白嫖!10GB免流海外BackBlaze对象存储【可套CDN

尾语H1#

无论怎样,毕竟数据无价,推荐进行多端备份,以保证自己图片不会丢失

其实图床并不只有我们这些博客在用,很多内容创作者以及开发者也都需要图床来解决图片存储的问题。

图床作为一个快速又免费的储存方式,无疑是非常方便的。

记住,如果你使用免费服务也要考虑合理性,避免被封杀或被限速,毕竟大部分的免费图床提供商在没有盈利的情况下只能支持有限的存储和带宽。

这篇文章等我又发现了什么优秀的可以白嫖的就更新()

夜深了,祝自己好梦

Copyright & License
© 2022 天翔TNXG
关于图片储存的那些事
CC知识共享许可
BY署名:必须保留原作者署名
NC非商业:禁止用于商业目的
SA相同方式共享:以同协议发布
许可协议:署名-非商业性使用-相同方式共享
天翔TNXG
天翔TNXG离线