前言

阿里云OSS在香港或其他海外地域的存储桶每个月有5G免费存储额度。
2022-07-24T05:11:00.png
一般小型项目也够用了。在这篇文章中主要是将nestjs适配上传到阿里云OSS。

建立阿里云存储桶

2022-07-24T05:13:54.png

地域选择中国香港

2022-07-24T05:15:32.png

接下来在传输管理中绑定自有域名,这样就可以通过自有域名进行访问。(如果本身域名解析绑定在阿里云的,在这边阿里云也可以选择自动添加cname。这样就不用自己去解析后台添加了。)

2022-07-24T05:18:59.png

如果不是解析在阿里云的,去自己的解析商添加cname解析。

如果需要HTTPS的,可以直接在域名管理页面去申请证书。过程不麻烦。

到这边,存储桶就建立完了。

nestjs 中代码

首先需要安装阿里云oss的依赖

yarn add ali-oss
yarn add @types/ali-oss

新建 alioss.ts 的文件

import * as OSS from 'ali-oss';
import { AppConfig } from 'config';

const client = new OSS({
  region: AppConfig.aliOss.region,
  accessKeyId: AppConfig.aliOss.accessKeyId,
  accessKeySecret: AppConfig.aliOss.accessKeySecret,
  bucket: AppConfig.aliOss.bucket,
  endpoint: AppConfig.aliOss.endpoint,
  cname: AppConfig.aliOss.cname,
});
export async function put(file: any, fileName: string) {
  try {
    // 填写OSS文件完整路径和本地文件的完整路径。OSS文件完整路径中不能包含Bucket名称。
    // 如果本地文件的完整路径中未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
    await client.put('上传OSS的文件路径' + `${fileName}`, file);
  } catch (e) {
    console.log(e);
  }
}
//获取OSS的签名后的图片地址,因为设置的不是公开访问,毕竟免费额度少,万一被DDOS就不好了。签名一次有效期20分钟,所以这是获得签名后的图片地址,传给前端。
export function getOssSignatureUrl(fileName: string) {
  try {
    const result = client.signatureUrl('你的OSS文件路径地址。' + `${fileName}`);
    return result;
  } catch (e) {
    console.log(e);
  }
}
// 调用listDir函数,通过设置不同的文件前缀列举不同的目标文件。
// 上限1000个文件,如果超过1000个文件,返回会带nextMarker,在下次访问中,maker中填上nextMarker,就可以获取下一页。
export async function listDir(dir: string, nextMarker?: string) {
  const result = await client.list(
    {
      prefix: dir,
      // 设置正斜线(/)为文件夹的分隔符。
      delimiter: '/',
      'max-keys': 1000,
      marker: nextMarker,
    },
    {},
  );

  return result;
}
export async function deleteFile(fileName: string) {
  try {
    // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
    await client.delete(fileName);
    //console.log(result);
  } catch (e) {
    console.log(e);
  }
}

详解config内OSS配置文件

  aliOss: {
    // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
    region: 'oss-cn-hongkong',
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    accessKeyId: '你的RAM用户的访问accessKeyId',
    accessKeySecret: '你的RAM用户的访问accessKeySecret',
    // 填写Bucket名称。关于Bucket名称命名规范的更多信息,请参见Bucket。
    bucket: 'test-andiliba',
    //是否使用自己的域名,提前在阿里OSS内创建好Bucket,并将其指定为自己的域名
    //刚刚绑定的域名
    endpoint: 'testandiliba.andiliba.cn',
    cname: true,
  }

引用

费用传送门
nodejs API

最后修改:2022 年 07 月 24 日
拿来吧你~