云開發(fā) 云存儲(chǔ):上傳、下載、CDN 地址、刪除文件

2020-07-22 15:34 更新

前面章節(jié)分享了云函數(shù)、數(shù)據(jù)庫(kù),基本上可以完成一個(gè)簡(jiǎn)單應(yīng)用開發(fā)了。但是一款應(yīng)用應(yīng)該還會(huì)有圖片、視頻之類的,那么這些數(shù)據(jù)存放在哪呢?那就是云存儲(chǔ)。云存儲(chǔ)每個(gè)云廠商的叫法不一樣,有的叫 OSS、有的叫 COS。

我們打開騰訊云云開發(fā)控制臺(tái),如下圖是云開發(fā)的云存儲(chǔ)界面。

云存儲(chǔ)的作用或者說(shuō)能力有:

  • 可以設(shè)置訪問權(quán)限,比如公開圖片或者私人相冊(cè),可以點(diǎn)擊【權(quán)限設(shè)置】進(jìn)行設(shè)置;
  • 可以作為圖片上傳的圖床,比如存放 icon 、image、svg......
  • 可以作為一些素材或者物料倉(cāng)庫(kù),例如存放 pdf、word、excel......
  • 云開發(fā)的云存儲(chǔ)默認(rèn)是 CDN 加速的;

下面的環(huán)節(jié),都是在云函數(shù)的基礎(chǔ)上操作的,假如對(duì)云函數(shù)不了解,可以閱讀編寫第一個(gè)云函數(shù)。

上傳文件

我們可以使用 云開發(fā) Node.js SDK,在云函數(shù)中進(jìn)行圖片的上傳。

'use strict';
const tcb = require("tcb-admin-node")
const fs = require("fs")
const app = tcb.init({
  env: '你的環(huán)境 ID'
})


exports.main = async (event, context) => {

    
    // uploadFile 上傳文件
    let data = await app.uploadFile({
        cloudPath: "/test-00001.jpg",
        // fileContent: buffer 或要上傳的文件可讀流
        // 后續(xù)會(huì)將更簡(jiǎn)單的方法,在前端直接通過 JS-SDK 上傳
        fileContent: fs.createReadStream('./test.png') 
    })


    return {
        status: 1,
        file_id: res.fileID
    }


}

下載文件

有了文件上傳,就有文件的下載動(dòng)作。

'use strict';
const tcb = require("tcb-admin-node")
const fs = require("fs")
const app = tcb.init({
  env: '你的環(huán)境 ID'
})


exports.main = async (event, context) => {


  // downloadFile 下載圖片
  let res = await app.downloadFile({
    fileID: '云存儲(chǔ)中文件的 fileID',
  })


  // fileContent 類型為 Buffer
  return res.fileContent
}

獲取文件的 CDN 訪問路徑

一般情況,手動(dòng)上傳的文件,都可以復(fù)制到 CDN 的訪問鏈接。但是如果是代碼大批量上傳的,我們可以寫程序獲取,例如獲取用戶的頭像。



const tcb = require('tcb-admin-node')


const app = tcb.init({
  env: '你的環(huán)境 ID'
})


exports.main = async (event, context) => {


  // getTempFileURL 獲取 CDN 訪問地址
  let res = await app.getTempFileURL({
    // fileID 數(shù)組
    fileList: ['fileID-1', 'fileID-2']
  })


  res.fileList.forEach(item => {
    // 打印文件訪問鏈接
    console.log(item.tempFileURL) 
  })


}

刪除文件

刪除文件也比較簡(jiǎn)單。

const tcb = require('tcb-admin-node')


const app = tcb.init({
  env: '你的環(huán)境 ID'
})


exports.main = async (event, context) => {


  // deleteFile 刪除文件
  let res = await app.deleteFile({
    fileList: [
        'cloud://a/b/c',
        'cloud://d/e/f'
    ]
  })


  return res.fileList


}

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)