1. 程式人生 > >如何用雲開發建立專屬檔案儲存小程式?丨實戰

如何用雲開發建立專屬檔案儲存小程式?丨實戰

▌一、專案背景

學習雲開發也有段時日了,當時就想試試手,不過一直沒有靈感。直到有一次同學問我有沒有老師發過的某個ppt,我說你怎麼不去翻聊天記錄呢?他說太麻煩,而且聊天記錄中的檔案可能會被清理。

當時就想到如果可以做個小型的檔案儲存小程式該多好,於是就下手了。往往需求決定產品這就沒錯了。下面繼續介紹下小程式是如何實現的。

▌二、專案簡介

愛儲存是一個可以將手機相簿裡的照片(或拍照的照片)和微信聊天會話裡的檔案(比如Doc、docx、xls、xlsx、ppt等檔案)上傳到雲開發的儲存裡,並可以進行分享的小程式。

愛儲存小程式使用的是小程式的雲開發,雲開發自帶免費的雲端儲存、雲資料庫,開始時不需要涉及伺服器的搭建及運維,也不需要進行域名註冊與備案,只需要通過一些簡單的API就能實現一個完整專案的業務邏輯,免費而且無需後端,開發成本非常低,因此這個小程式從建立到釋出都是免費的,非常適合新手。

▌三、專案準備

在雲資料庫中建立diary、fileCountInfo集合,許可權都是僅建立者可讀寫,在雲端儲存中建立一個diary資料夾。

▌四、功能介紹與專案的目標

下面將會圍繞以下幾個比較核心的功能進行分析。

首頁彈窗倒計時:

該彈窗在使用者使用小程式期間只會彈出一次。彈窗彈出時可以自動取消彈窗在這裡是通過倒計時來關閉的當然也可以點選按鈕取消,具體效果請親自使用下小程式,下方是判斷及新增快取部分程式碼。

//判斷是否添加了快取  
  wx.getStorage({
      key: 'time2',
      success: res => {
        this.setData({
          instructions: false
        })
      },
      fail: err => {
  //新增快取
        wx.setStorage({
          key: "time2",
          data: new Date().getTime(),
          success: res => {
            this.setData({
              instructions: true
            })
            var interval = setInterval(event => {
              var timeCount = this.data.timeCount
              this.setData({
                timeCount: --timeCount
              })
            }, 1000)
      //15秒後取消彈窗
            setTimeout(res => {
              this.setData({
                instructions: false
              })
              clearInterval(interval);
            }, 15000)
          }
        })


      }
    })

限制每個使用者只有100M儲存空間,在雲開發資料庫中建立一個fileCountInfo集合(許可權設定為僅建立者可讀寫),為每個使用者新增一條記錄欄位有currentStorage(當前儲存容量)和maxStorageCount(最大儲存容量),這樣就為以後的容量儲存限制做了鋪墊。下方是部分實現程式碼,邏輯還需要自己揣摩。

限制支援檔案型別:

doc、docx、xls、xlsx、ppt、pptx、pdf 在js裡添加了一個數組變數fileFormat用來儲存僅支援的檔案型別,通過js程式碼判斷使用者選取的檔案是否在這個數組裡從而能否上傳,當然判斷使用者是否能上傳還有儲存容量的限制,前面已經說了最大 100M,每次使用者上傳檔案currentStorage欄位都會增加使用者上傳的檔案大小,具體實現看原始碼上面都有註釋。下方是部分程式碼用來實現是否是支援的檔案型別。

for (var i = 0; i < res.tempFiles.length; i++) {
            var position = res.tempFiles[i].name.lastIndexOf('.');
            var suffix = res.tempFiles[i].name.substring(position + 1);
            if (this.data.fileFormat.indexOf(suffix) < 0) {
              console.log("檔案格式")
              this.setData({
                canUpload: false,
                fileType: suffix
              })
              console.log(this.data.fileType)
              break;
            }
          }

檔案的上傳及刪除:

檔案上傳包括上傳之前的判斷是否符合要求,前面有提到過。還會涉及到一些坑一會再說。

其他小功能:

檔案預覽、檔案的分享,檔案的排序及下方儲存容量的顯示邏輯比較簡單這部分比較簡單大家看下原始碼就可以了。

▌五、遇到的困難

遇到的困難也就是在檔案上傳和刪除那一塊,就是我剛才說一會要解決的問題。在上傳檔案會涉及到單個檔案或多個檔案同時上傳,是每個檔案上傳成功都要提示下成功上傳提示呢?還是所選檔案全部上傳完才提示呢?如果是前者肯定會對使用者不友好所以我選擇了後者,但怎麼才能讓它們全部上傳完才彈出上傳成功提示呢,我試了很多方法比如加個flag標誌等等,但都不能很好地解決問題。我靜下心來再仔細想想,想到了以前使用的 promise 正好適合這個場景,所以使用了 promise 解決了該問題,這裡遇到的問題和刪除檔案類似就不一一描述,相關程式碼可參見專案原始碼。

▌六、總結

小程式較其他程式語言更容易上手,尤其使用了雲開發自帶免費的雲端儲存、雲資料庫,讓此專案更快的完成。相信通過學習此專案你已經可以開發自己的檔案儲存小程式了。

原始碼地址

https://tencentcloudbase.github.io/


如果你想要了解更多關於雲開發CloudBase相關的技術故事/技術實戰經驗,請掃碼關注【騰訊云云開發】公眾號~

相關推薦

如何用開發建立專屬檔案儲存程式實戰

▌一、專案背景 學習雲開發也有段時日了,當時就想試試手,不過一直沒有靈感。直到有一次同學問我有沒有老師發過的某個ppt,我說你怎麼不去翻聊天記錄呢?他說太麻煩,而且聊天記錄中的檔案可能會被清理。 當時就想到如果可以做個小型的檔案儲存小程式該多好,於是就下手了。往往需求決定產品這就沒錯了。下面繼續介紹下小程式是

基於程式·開發構建高考查分程式實戰

2019高考報名人數達到了 1031 萬的新高,作為一名三年前參考高考的準程式猿,趕在高考前,加班加點從零開始做了一款高考查分小程式,算是一名老學長送給學弟學妹們的高考禮。上線僅 1 個月,使用者數就突破了 1k,關於小程式的介紹就不多說了,可以去搜【歷年高考分數線查詢】體驗,今天主要談談技術原理和實現細節。

程式·開發打造功能全面的部落格程式實戰

用小程式·雲開發將部落格小程式常用功能“一網打盡” 本文介紹mini部落格小程式的詳情頁的功能按鈕如何實現,具體包括評論、點贊、收藏和海報功能,這裡記錄下整個實現過程和實際編碼中的一些坑。 評論、點贊、收藏功能 實現思路 實現文章的一些操作功能,最主要的還是評論,這是作者和讀者之間溝通的橋樑,評論功能的衍

程式·開發輕鬆構建二手書商城程式實戰

“拱手讓書,智慧相傳。本文將帶大家使用雲開發快速開發完整的校園二手書商城“ 導語 很多大學有個普遍現象,畢業或者搬校區的時候,成堆成堆的書都被隨便處理掉,作為過來人,每每想到都十分痛心可惜,而導致這種情況發生的原因,我認為主要還是歸結學校原因,一方面沒有提供靠譜便利的平臺,另一方面,宣傳不到位,基於此開發了

開發快速製作客戶業務需求收集程式實戰

一、導語 ​ 如何省去企業上門(現場)蒐集客戶需求的環節,節約企業人力和時間成本,將客戶的業務定製需求直接上傳至雲資料庫?雲開發為我們提供了這個便利! 二、需求背景 ​ 作為一名XX公司IT萌萌新,這段時間對小程式開發一直有非常濃厚的興趣,並且感慨於“雲開發·不止於快”的境界。近期工作中,剛好碰見業務部門的一

微信程式開發及一些微信程式的回顧個人筆記

官方自帶模板  第一個資料夾是一個 雲函式|專案的名字               第二個資料夾是迷你程式  裡面有json js wxss 和三個資料夾 images pages style  

開發初探 —— 更簡便的程式開發模式

原文連結 李成熙,騰訊雲高階工程師。2014年度畢業加入騰訊AlloyTeam,先後負責過QQ群、花樣直播、騰訊文件等專案。2018年加入騰訊云云開發團隊。專注於效能優化、工程化和小程式服務。 小程式誕生以來,業界關注小程式前端的技術演進較多,因此眾多小程式前端

程式 · 開發”重磅上線,讓程式開發更高效!

近日,“小程式 · 雲開發”解決方案正式上線,該方案可以為小程式開發者提供完整的雲端支援。通過簡

藉助開發輕鬆實現後臺資料批量匯出實戰

小程式匯出資料到excel表,藉助雲開發後臺實現excel資料的儲存 我們在開發小程式的過程中,可能會有這樣的需求:如何將雲資料庫裡的資料批量匯出到excel表裡? 這個需求可以用強大的雲開發輕鬆實現! 這裡需要用到雲函式,雲端儲存和雲資料庫。可以說通過這一個例子,把小程式雲開發相關的知識都用到了。下面就來

你的心事我全知曉——心情日記程式實戰

閒暇之餘,聽媳婦嘀咕說要給她做一個能表達她每日心情的小程式,只能她在上面發東西。既然媳婦發話了,就花點心思做一個吧,因為沒有UI圖,所有佈局全靠自己瞎編,下面結合圖片和程式碼跟大家講解下實現過程,內容略長,感興趣的可以一覽。 下面將以圖片、程式碼的形式和大家講解這個小demo的實現過程: 首頁 首頁效

開發做了一款公司內部圖書借閱程式

最近體驗了一把小程式剛上的雲開發功能,為公司內部的圖書館做了一款 圖書借閱小程式,程式介面如下: 1.主頁--主要用來檢視公司內部同事在讀的書籍 2. 書城--公司內部同事分享的所有圖書 3. 圖書詳細資訊頁,使用的豆瓣免費的 api,但是這裡有個坑,豆瓣單方面封殺了

微信程式開發·初探三(檔案操作)

We are the champion. We’ll keep on fighting till the end. 雲開發·檔案上傳 上傳檔案 在小程式端可呼叫 wx.cloud.uploadFile 方法進行上傳: wx.cloud.upl

開發實現程式訂閱訊息配置

10月12日微信官方釋出了小程式模板訊息能力調整的通知 : https://developers.weixin.qq.com/community/develop/doc/00008a8a7d8310b6bf4975b635a401 相比之前的有了較大的調整,主要的調整就是從開發者主動下發訊息改為使用者自主訂閱

開發Cloudbase,實現程式多圖片內容安全監測

### 前言 相比於文字的安全檢測,圖片的安全檢測要稍微略複雜一些,當您讀完本篇,將get到 - 圖片安全檢測的應用場景 - 解決圖片的安全校驗的方式 - 使用雲呼叫方式對圖片進行檢測 - 如何對上傳圖片大小進行限制 - 如何解決多圖上傳覆蓋問題 ## **示例效果** 當用戶上傳敏感違規圖片時,

開發初探 —— 更簡便的程序開發模式

全棧工程師 openid team 考慮問題 課程 不用 研發 社區 由於 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由李成熙heyli發表於雲+社區專欄 李成熙,騰訊雲高級工程師。2014年度畢業加入騰訊AlloyTeam,先後負責過QQ群、花樣直

android通過JNIC/C++建立本地檔案

通過jni在本地建立檔案 1.在android studio建立基本的jni工程,並且在APP介面成功顯示"Hello from C++" 不會的可以看android studio使用jni 2.在native-lib.cpp檔案中建立檔案 為了方便,我們直接在stringFromJ

【Unity Shaders】使用CgInclude讓你的Shader模組化——建立CgInclude檔案儲存光照模型

這裡是本書所有的插圖。這裡是本書所需的程式碼和資源(當然你也可以從官網下載)。========================================== 分割線 ==========================================寫在前面瞭解內建的C

window下命令符建立檔案,類似於其他系統touch 的用法

開啟命令視窗, 輸入如下,就會建立index.html檔案同時寫入你好,以此類推,可以建立js,txt,php等各中檔案,>符號前為寫入的內容,不能為空 echo 你好>index.html    ps:window想在那個目錄開啟cmd視窗(命令視窗), 按住s

開發資料庫實現列表觸底自動載入功能開發101

雲開發資料庫之觸底自動載入 在前面的兩篇文章中,我們簡單的談了談雲開發資料庫與傳統資料庫的差異,以及雲開發資料庫中的許可權機制,今天我們來分享一些實用的程式碼,快速幫助大家完成自己的小程式的部分功能。 微信小程式實現觸底自動載入 在開發小程式類資訊流型別的應用時,我們經常會有一個需求,就是當用戶將列表滑動到列

Intellij IDEA 建立臨時檔案,Git 跟蹤不到的那種

| **好看請贊,養成習慣** > - 你有一個思想,我有一個思想,我們交換後,一個人就有兩個思想 > > - If you can NOT explain it simply, you do NOT understand it well enough 現陸續將Demo程式碼和技術文