菲鸽 带你走进 laf OSS (上)

菲鸽 带你走进 laf OSS (上)

大家好,我是 菲鸽 ,今天我带给大家关于 laf OSS------ 存储(Bucket) 的创建和使用。

本文分为以下几部分:

  • 存储(Bucket) 简介
  • 存储(Bucket) 创建
  • 存储(Bucket) 资源上传
  • 存储(Bucket) 资源访问
  • 云函数 中上传文件
  • 实战 云函数 上传

存储(Bucket) 简介

laf 云存储是兼容 S3 API 的对象存储服务,支持多种存储桶权限,包括私有读(private)公共读(readonly)公有读写(readwrite) ,支持通过 HTTP/HTTPS 访问,支持自定义文件元数据,支持文件上传、下载、删除、获取文件列表等操作。

存储(Bucket) 创建

新建一个 存储(Bucket),如下图,需要填写 名称 和 选择 权限,权限有 私有(private)公共读(readonly)公共读写(readwrite) 3种。

  • readwrite 公有读写权限,无需凭证即可对存储桶中的文件进行读写操作。
  • readonly 公有读权限,无需凭证即可对存储桶中的文件进行读操作,但是需要凭证才能对存储桶中的文件进行写操作。
  • private 私有读写权限,需要使用凭证才能对存储桶中的文件进行读写操作。

laf 在新建的时候已经把您的应用的名称 appid 写进去了,如下图:

创建好后,可以看到所有的 存储(Bucket) 列表,显示了 名称权限 ,如下图左侧部分:

laf 会为每个应用自动创建一个名为 {appid}-cloud-bin 的存储桶,用于存储应用的缓存和备份文件,默认该存储桶的权限为 private,建议不要修改该存储桶的权限。(如下图第一个存储桶)

私有(private)公共读写(readwrite) 不能开启 网站托管 ,点击 开启会出现 如下图提示:

注意 公共读写(readwrite) 也不能开启 网站托管

只有 公共读(readonly) 可以开启 网站托管 ,点击 开启会出现 如下图提示:

开启成功后,会显示所有的已经上传的资源,如下图。并且可以取消托管,见下图右上角。

存储(Bucket) 资源上传

点击 上传 即可打开 上传弹窗,支持 选择文件上传拖拽文件上传,并且都支持 文件夹上传的方式 !

使用 文件夹上传 的方式有一个问题,就是 laf 不会帮你新建同名的文件夹并放进去,但是内部的更深层的文件夹会帮你建好,如下图 绿色箭头的2个文件夹 都是在一个父文件夹里面拖进来的,父文件夹不见了,子文件夹还在。

总体体验还是不错的,要是父文件夹也帮我们建了会更好~

存储(Bucket) 资源访问

如下图,点击下面的 眼睛 👁 会自动打开一个 新的tab 显示里面的内容,点击下面 链接 🔗 会帮你复制好 资源地址

复制得到的链接如 https://oss.laf.run/ukw0y1-cloud-bin/pretty-girl.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ukw0y1%2F20240309%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240309T090027Z&X-Amz-Expires=900&X-Amz-Signature=b538f7f2b03bbdc60b76221ba1b7623f795f4b6b90b34fae47018f93631ac244&X-Amz-SignedHeaders=host访问会有惊喜哦^_^)。

云函数 中上传文件

在云函数中操作云存储,需要提前创建一个 存储桶(Bucket),以下示例使用 data 存储桶演示上传文件操作,请提前创建该存储桶。

1)上传文件

ts 复制代码
import cloud from '@lafjs/cloud'

export default async function (ctx: FunctionContext) {
  // 获取存储桶
  const bucket = cloud.storage.bucket('data')

  // 写文件
  const content = 'hello, laf'
  await bucket.writeFile('laf.html', content)
}

2)指定文件类型(MIME)

在上面的示例中,文件类型默认为 application/octet-stream,如果需要指定文件类型,可以在 writeFile 方法中传入 options.ContentType 参数:

diff 复制代码
import cloud from '@lafjs/cloud'

export default async function (ctx: FunctionContext) {
  // 获取存储桶
  const bucket = cloud.storage.bucket('data')

  // 写文件并指定文件类型为 text/html
  const content = 'hello, laf'
-  await bucket.writeFile('laf.html', content)
+  await bucket.writeFile('index.html', content, {
+    ContentType: 'text/html'
+  })
}

3) 上传文件流

ts 复制代码
import cloud from '@lafjs/cloud'
import { createReadStream } from 'node:fs'

export default async function (ctx: FunctionContext) {

  // 获取存储桶
  const bucket = cloud.storage.bucket('data')

  // 读文件流
  const stream = createReadStream('./package.json')

  // 写文件
  await bucket.writeFile('laf.json', stream, {
    ContentType: 'application/json'
  })
}

4) 上传文件 Buffer

ts 复制代码
import cloud from '@lafjs/cloud'
import { readFile } from 'node:fs/promises'

export default async function (ctx: FunctionContext) {

  // 获取存储桶
  const bucket = cloud.storage.bucket('data')

  // 读文件 Buffer
  const buffer = await readFile('./package.json')

  // 写文件
  await bucket.writeFile('laf.json', buffer, {
    ContentType: 'application/json'
  })
}
相关推荐
瑶琴AI前端1 小时前
uniapp组件实现省市区三级联动选择
java·前端·uni-app
mosen8681 小时前
Uniapp去除顶部导航栏-小程序、H5、APP适用
vue.js·微信小程序·小程序·uni-app·uniapp
尚梦9 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
尚学教辅学习资料16 小时前
基于SSM+uniapp的营养食谱系统+LW参考示例
java·uni-app·ssm·菜谱
Bessie23416 小时前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
qq22951165021 天前
小程序Android系统 校园二手物品交换平台APP
微信小程序·uni-app
qq22951165022 天前
微信小程序uniapp基于Android的流浪动物管理系统 70c3u
微信小程序·uni-app
qq22951165022 天前
微信小程序 uniapp+vue老年人身体监测系统 acyux
vue.js·微信小程序·uni-app
摇头的金丝猴2 天前
uniapp vue3 使用echarts-gl 绘画3d图表
前端·uni-app·echarts
小远yyds2 天前
跨平台使用高德地图服务
前端·javascript·vue.js·小程序·uni-app