通過uniCloud白撿一個線上圖庫管理工具,可支持圖床外鏈

来源:https://www.cnblogs.com/moohng/archive/2022/03/18/16020083.html
-Advertisement-
Play Games

經過前面兩天的學習,已經對Node.js有了一個初步的認識,今天繼續學習其他內容,並加以整理分享,如有不足之處,還請指正。 ...


喜欢写文章的技术大佬们,应该都有一个自己的在线图片管理工具吧。

尤其是在写markdown时,为了让我们的文章“图文并茂”,显得不那么枯燥,就经常需要在合适的地方插入一些关联性的图片。

据说图片还能有效减少读者的视觉疲劳,使大脑有一个短暂的缓冲效果。

假装有图片

然而,markdown中插入图片是严重依赖于在线可访问的图片的。如果没有一个专门的图片管理工具,要插入一张图片还真的很折腾人。

介绍

得益于现在云开发概念的兴起,前端小伙伴们的全栈之路变得轻松了许多。

不用搭服务器、不用管数据库、不用买OSS、甚至都不用学Linux了;当然,最关键的还是这一切都变得“免费”了!

不管是阿里云、还是腾讯云,每个月都是有免费的额度的。就算额度超了,按量计费也是非常的划算。反正,我是没超过。

uniCloud就是基于阿里云和腾讯云,为开发者提供的一个云开发平台。为什么选择uniCloud呢?主要是得益于uni家族的整个生态,可以完美的衔接起来。从开发到部署的整个流程全部都给你准备好了,只管用就是了。

开搞

2.1 创建项目

你可以选择uni官方推荐的HBuilderX创建,也可以选择cli命令行模式,更多可参考官方文档

下面是通过cli命令行创建vite + ts + vue3的项目模板:

npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project

2.2 创建云服务空间

uniCloud控制台创建一个服务空间,可自由选择阿里云和腾讯云,建议选择阿里云

然后通过HBuilderX打开之前创建的项目,在项目的根目录上右键,选择创建uniCloud云开发环境,然后选择阿里云或腾讯云进行创建。

最后在uniCloud文件夹上右键,与之前创建的云服务空间进行关联。

2.3 上传图片

主要步骤是先通过uni.chooseImage方法选择本地图片,然后再利用uniCloud的APIuniCloud.uploadFile方法将图片上传到云存储中去。

调用uniCloud的API必须先在项目中进行初始化,也就是跟你开通的云空间关联起来。

uniCloud初始化:

// ... 其他代码已省略
onLaunch() {
  // 云空间初始化
  uniCloud.init({
    provider: 'aliyun',
    spaceId: 'xxxxxxxxxxxxxxxxxxxxxxxxx',
    clientSecret: 'xxxxxxxxxxxxxxxxxxxxxxxxx',
  });
},

spaceIdclientSecret到uniCloud控制台去获取。

上传图片到云存储:

const res = await uniCloud.uploadFile({
  filePath: file.path,
  cloudPath: `${hash}/${file.name}`,
  onUploadProgress: (res) => {
    const { loaded, total } = res;
    console.log(loaded, total);
    this.$set(this.imgList[0], 'uploadPercent', (loaded / total) * 100);
  },
});

console.log('文件上传成功', res);

为了防止文件重复上传,在上传之前先计算出文件的MD5码作为hash值,与已上传的文件hash值进行比较。当然这个功能可做可不做,无伤大雅。

2.4 图片信息存入数据库

如果你想将所有上传的图片信息都保存起来,方便下次使用或者是在不同设备之间保持同步,那就必须将每次上传后的图片地址以及图片相关信息保存在云数据库了。

好在uniCloud的数据库也是免费的,不用白不用。而且还支持在客户端直接操作数据库,云函数这些都省了,简直不要太方便。

首先要创建一个数据表,可以在uniCloud控制台创建,也可以直接通过代码创建。为了简单,推荐直接去控制台创建吧,参考文档

在前端直接操作数据库,需要定义表结构DB Schema,这样在插入数据的时候,就可以自动进行一些字段的校验了。

将图片信息插入数据库:

interface Album {
  _id?: string;
  name: string;
  url: string;
  hash: string;
  createAt?: number;
  updateAt?: number;
}

export function saveAlbum(data: Album) {
  const collection = uniCloud.database().collection('你创建的表名称');
  return collection.add(data).then(({ result }: any) => result);
}

2.5 读取图片列表

直接上代码:

interface AlbumListQuery extends Partial<Album> {
  pageIndex?: number,
  pageSize?: number,
}

export function getAlbumList(query?: AlbumListQuery) {
  const collection = uniCloud.database().collection('你创建的表名称');
  const { pageIndex = 1, pageSize = 20, ...data } = query || {};
  return collection.where(data).orderBy('updateAt', 'desc').orderBy('createAt', 'desc').skip(pageSize * (pageIndex - 1)).limit(pageSize).get().then(({ result }: any) => result);
}

2.6 部署上线

uni家族的好处现在就体现出来了,连页面托管都给你准备好了,去控制台开通直接用就是了。

现在一个有基本功能的图片管理平台就算完成了。根据uniCloud官方的的提示:为了避免资源滥用,我的项目没有开源。大家可以自行搭建,仅限于正规的学习与交流哦。

其他方法

...客官,别急!!!

如果你觉得上面的教程写得太烂了,看不懂,也没关系。那我就再分享两个简单粗暴的方法吧!

  1. Github
  2. Gitee

没错,就是这两个家伙!

你只要把图片放在仓库中就行了

一句代码都不用写,一个命令也都不用敲。而且Github上的图片是通过jsdelivr来访问的,也完全不用担心速度问题。

这是我随便创建的两个仓库,可供参考:

https://gitee.com/moohng/cdn

https://github.com/moohng/bucket

使用方法:

https://gitee.com/moohng/cdn/raw/master/README.md
|     固定地址    |用户名|仓库名|--|分支名|文件路径

https://cdn.jsdelivr.net/gh/moohng/bucket@main/1627887240043-Javascript_01.jpg
|--------------------------|------|------|----|-------------------------------|
固定地址 + 用户名 + 仓库名 + 分支 + 文件路径

其实也还有很多第三方工具,可以同时支持很多平台的图片上传。不过我觉得有这几种方法完全够用了,而且可靠性相对都是比较高的,也不用担心时间久了图片挂掉。

完了

如果你有更好的方法推荐,欢迎在评论区留言讨论。

最后,感谢阅读!也可关注我的公众号【末日码农】,我们一起学习、一起进步!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 經過前面三天的學習,Node.js的基礎知識已逐漸掌握,今天繼續學習緩存區和文件操作,並稍加整理加以分享,如有不足之處,還請指正。 ...
  • 前言 在 《一篇帶你用 VuePress + Github Pages 搭建博客》中,我們使用 VuePress 搭建了一個博客,最終的效果查看:TypeScript 中文文檔。 本篇講講 SEO 優化中的 Open Graph protocol。 meta 標簽 如果我們打開思否任意一篇文章,比如 ...
  • 語義化是指使用恰當語義的html標簽,讓頁面具有良好的結構和含義。 比如p標簽就代表段落;article代表正文內容等。 語義化的好處有以下兩點: 開發者友好:使用語義類標簽增強了可讀性,開發者也能夠清晰地看出網頁的結構,也更為便於團隊的開發和維護; 機器友好:帶有語義的文字表現力豐富,更適合搜索引 ...
  • 本人是重度書簽使用者,多年收藏積累的書簽有4萬多。 雖然我對書簽的文件夾進行了結構化的整理,但是每當添加新的書簽時候,還是很難快速的找到相關的文件夾。 因此開發這個小插件可以快速的對書簽進行添加和整理。 ...
  • 開源項目其實有一個成熟周期,這個周期大概是三年左右,自React框架在2013年發佈並引爆了前端框架的大潮,這個屬於前端的周期就此開始了。之後在2015年5月開源的React Native又開啟了屬於Web移動前端的周期,15-16年,18-19年,21-22年正好就是屬於移動前端的三個爆發點。 ...
  • 描述: 本篇文章為了記錄日常生活中或者項目中經常使用到的JS方法,會長期記錄... 數組中的方法 1.map和forEach方法 map 參數為回調函數,得到一個新數組 forEach 修改原數組,不會產生新數組 2.pop和push方法(棧結構) push 向數組末尾添加一個元素或者多個元素,會改 ...
  • 前言 在 《一篇帶你用 VuePress + Github Pages 搭建博客》中,我們使用 VuePress 搭建了一個博客,最終的效果查看:TypeScript 中文文檔。 本篇講講 SEO 中的一些細節優化。 1. 設置全局的 title、description、keywords // co ...
  • word-break: normal; // 此值為瀏覽器的預設屬性:以單詞為單位; keep-all 這個值由於相容性差,很少用;word-wrap: normal; // 此值為瀏覽器的預設屬性:以單詞為單位; 純中文:自動換行,一個漢字看做一個單詞; 純英文或純數字:看做一個單詞,不換行; 遇 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...