uniCloud 云存儲

云存儲的上傳方式有3種:
web界面:即在https://unicloud.dcloud.net.cn/ web控制臺妆艘,點擊云存儲佛纫,通過web界面進行文件上傳。該管理界面同時提供了資源瀏覽傅物、刪除等操作界面。
客戶端API或組件上傳:在前端js中編寫uniCloud.uploadFile,或者使用uni ui的FilePicker組件饶唤,文件選擇+上傳均封裝完畢蓝翰。
云函數(shù)上傳文件到云存儲:即在云函數(shù)js中編寫uniCloud.uploadFile

注意:
前端和云函數(shù)端光绕,均有一個相同名稱的api:uniCloud.uploadFile。請不要混淆畜份。
○ 前端還有一個uni.uploadFile的API诞帐,那個API用于連接非uniCloud的上傳使用。請不要混淆爆雹。
○ 在使用騰訊云時如果訪問云存儲文件提示The requested URL '/1123.jpg' was not found on this server這種錯誤停蕉,一般是cdn流量用盡導(dǎo)致的「铺可以升級配置或轉(zhuǎn)為按量計費(目前僅企業(yè)類型認證的賬號可以使用按量計費的服務(wù)空間)慧起。
○ 在允許用戶上傳圖片的應(yīng)用里,違規(guī)檢測是必不可少的册倒,為此uniCloud提供了內(nèi)容安全檢測模塊健爬,可以很方便的實現(xiàn)圖片鑒黃等功能桐早。詳情參考:內(nèi)容安全

阿里云的云存儲有一些限制:
○ 不支持目錄(弱智)
○ 同名文件上傳也是按新文件名對待歉摧,不會覆蓋
○ 文件沒有讀權(quán)限控制牡彻,任意人知道路徑都可以讀。
○ 騰訊云沒有上述限制崇呵。

客戶端API

uploadFile(Object object)
請求參數(shù)

image.png

注意
○ 使用阿里云時缤剧,cloudPath為云端文件名,請勿使用非法字符
○ 騰訊云cloudPath 為文件的絕對路徑域慷,包含文件名 foo/bar.jpg荒辕、foo/bar/baz.jpg 等,不能包含除[0-9 , a-z , A-Z]犹褒、/抵窒、!、-化漆、_估脆、.、座云、*和中文以外的字符疙赠,使用 / 字符來實現(xiàn)類似傳統(tǒng)文件系統(tǒng)的層級結(jié)構(gòu)付材。
○ 騰訊云cloudPath為文件標(biāo)識,相同的cloudPath會覆蓋圃阳,如果沒有權(quán)限覆蓋則會上傳失敗厌衔。阿里云以自動生成的ID為文件標(biāo)識,不會存在覆蓋問題
○ 阿里云目前由于安全原因暫時禁止云存儲內(nèi)上傳html文件
○ 上傳文件超時時間可以在項目manifest.json內(nèi)進行配置

響應(yīng)參數(shù)


image.png

示例代碼:

uni.chooseImage({
  count: 1,
  success(res) {
    console.log(res);
    if (res.tempFilePaths.length > 0) {
      let filePath = res.tempFilePaths[0]
      //進行上傳操作

      // promise方式
      const result = await uniCloud.uploadFile({
        filePath: filePath,
        cloudPath: 'a.jpg',
        onUploadProgress: function(progressEvent) {
          console.log(progressEvent);
          var percentCompleted = Math.round(
            (progressEvent.loaded * 100) / progressEvent.total
          );
        }
      });

      // callback方式捍岳,與promise方式二選一即可
      uniCloud.uploadFile({
        filePath: filePath,
        cloudPath: 'a.jpg',
        onUploadProgress: function(progressEvent) {
          console.log(progressEvent);
          var percentCompleted = Math.round(
            (progressEvent.loaded * 100) / progressEvent.total
          );
        },
        success() {},
        fail() {},
        complete() {}
      });
    }
  }
});

getTempFileURL(Object object)
在云函數(shù)中富寿,把文件的fileid轉(zhuǎn)換為臨時URL。臨時URL有有效期限制锣夹,避免其他人獲取URL后可以持續(xù)訪問該文件页徐。
請求參數(shù)

image.png

響應(yīng)參數(shù)
image.png

示例代碼:

// promise方式
uniCloud.getTempFileURL({
        fileList: ['cloud://test-28farb/a.png']
    })
    .then(res => {});

// callback方式,與promise方式二選一
uniCloud.getTempFileURL({
    fileList: ['cloud://test-28farb/a.png'],
    success() {},
    fail() {},
    complete() {}
});

chooseAndUploadFile(Object object)
通過ui界面選擇文件(圖片/視頻)并直接上傳到云存儲银萍。
同時提供了選擇回調(diào)事件变勇,方便對選擇后的圖片進行壓縮等二次處理,然后再上傳贴唇。
請求參數(shù)
type:'image'|'video'|'all'
回調(diào)方法
onChooseFile(Object OnChooseFileRes)
選擇圖片的回調(diào)事件搀绣。方便對選擇后的圖片進行壓縮、裁剪等二次處理戳气,然后再上傳链患。
OnUploadProgress(Object OnUploadProgressRes)
上傳進度的回調(diào)
OnUploadProgressRes結(jié)構(gòu)如下

{
  index: 0, // 觸發(fā)此回調(diào)的文件序號
  loaded: 256, // 已上傳大小
  total: 1024, // 總大小
  tempFilePath: '', // 本地臨時文件路徑
  tempFile: {} // 本地文件對象
}

示例:

function cropImg(file) {
  return new Promise((resolve, reject) => {
    let ext
    let filePathProcessed = file.path // 處理結(jié)果
    // #ifdef H5
    ext = file.name.split('.').pop()
    resolve({
      path: filePathProcessed,
      ext,
      fileType: file.fileType
    })
    // #endif
    // #ifndef H5
    uni.getImageInfo({
      src: file.path,
      success(info) {
        ext = info.type.toLowerCase()
        resolve({
          path: filePathProcessed,
          ext,
          fileType: file.fileType
        })
      },
      fail(err) {
        reject(new Error(err.errMsg || '未能獲取圖片類型'))
      }
    })
    // #endif
  })
}

uniCloud.chooseAndUploadFile({
  type: 'image',
  onChooseFile(res) {
    const processAll = []
    for (let i = 0; i < res.tempFiles.length; i++) {
      processAll.push(cropImg(res.tempFiles[i]))
    }
    return Promise.all(processAll).then((fileList) => {
      let result = {
        tempFilePaths: []
      }
      result.tempFiles = fileList.map((fileItem, index) => {
        result.tempFilePaths.push(fileItem.path)
        return {
          path: fileItem.path,
          cloudPath: '' + Date.now() + index + '.' + fileItem.ext, // 云端路徑,這里隨便生成了一個
          fileType: fileItem.fileType
        }
      })
      return result
    })
  }
}).then(res => {
  console.log(res)
})

云函數(shù)API

文件上傳
uniCloud.uploadFile(Object uploadFileOptions)
uploadFileOptions參數(shù)說明

image.png

響應(yīng)參數(shù)
image.png

示例

// 云函數(shù)上傳文件示例代碼
const fs = require("fs");
let result = await uniCloud.uploadFile({
    cloudPath: "test-admin.jpeg",
    fileContent: fs.createReadStream(`${__dirname}/cos.jpeg`)
});

刪除文件
uniCloud.deleteFile(Object deleteFileOptions)
deleteFileOptions參數(shù)說明

image.png

響應(yīng)參數(shù)
image.png

示例代碼

// 云函數(shù)刪除文件示例代碼
let result = await uniCloud.deleteFile({
    fileList: [
        "cloud://test-28farb/a.png" // 阿里云fileID是url形式瓶您,例:https://xxx.com/xxx.png
    ]
});

文件下載
uniCloud.downloadFile(Object downloadFileOptions)
云函數(shù)下載已上傳至云開發(fā)的文件至本地(默認本地根目錄/root)
阿里云不支持麻捻,騰訊云支持該方法
downloadFileOptions參數(shù)說明

image.png

響應(yīng)參數(shù)
image.png

示例代碼

let result = await uniCloud.downloadFile({
    fileID: "cloud://aa-99j9f/my-photo.png",
    // tempFilePath: '/tmp/test/storage/my-photo.png'
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市览闰,隨后出現(xiàn)的幾起案子芯肤,更是在濱河造成了極大的恐慌巷折,老刑警劉巖压鉴,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锻拘,居然都是意外死亡油吭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門署拟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婉宰,“玉大人,你說我怎么就攤上這事推穷⌒陌” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵馒铃,是天一觀的道長蟹腾。 經(jīng)常有香客問我痕惋,道長,這世上最難降的妖魔是什么娃殖? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任值戳,我火速辦了婚禮,結(jié)果婚禮上炉爆,老公的妹妹穿的比我還像新娘堕虹。我一直安慰自己,他們只是感情好芬首,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布赴捞。 她就那樣靜靜地躺著,像睡著了一般郁稍。 火紅的嫁衣襯著肌膚如雪螟炫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天艺晴,我揣著相機與錄音昼钻,去河邊找鬼。 笑死封寞,一個胖子當(dāng)著我的面吹牛然评,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狈究,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼碗淌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抖锥?” 一聲冷哼從身側(cè)響起亿眠,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磅废,沒想到半個月后纳像,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡拯勉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年竟趾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宫峦。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡岔帽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出导绷,到底是詐尸還是另有隱情犀勒,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贾费,受9級特大地震影響枚碗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铸本,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一肮雨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箱玷,春花似錦怨规、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舶得,卻和暖如春掰烟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沐批。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工纫骑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人九孩。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓先馆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親躺彬。 傳聞我的和親對象是個殘疾皇子煤墙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • [TOC] 云開發(fā)常用api 1.獲取當(dāng)前用戶openid 第一步:創(chuàng)建云函數(shù) (自定義命名云函數(shù)) 第二步:部署...
    autumn_3d55閱讀 260評論 0 2
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,769評論 0 15
  • 個人如何申請注冊微信小程序 (注:如果注冊小程序請按步驟操作) 一、申請前準(zhǔn)備: 微信持有人以及郵箱持有人已滿18...
    Virtual_human閱讀 746評論 0 1
  • 阿里云對象存儲OSS,主要是用于存儲靜態(tài)資源文件,它提供了很多方便的操作圖片的方法(縮放旋轉(zhuǎn)水印等),在實現(xiàn)了OS...
    記住你姓李閱讀 10,445評論 0 9
  • 1.什么是uniCloud宪拥? 是Dcloud聯(lián)合阿里云仿野,騰訊云,為uniapp的開發(fā)者提供的基于serverles...
    焚心123閱讀 27,797評論 2 16