返回

轻松搞定OSS签名直传上传回调!Nest.js助力实现无缝集成

前端

通过 Nest.js 实现 OSS 签名直传上传回调

简介

Nest.js 是一款流行的基于 Node.js 的后端框架。阿里云对象存储服务 (OSS) 是一种可靠且经济高效的云存储解决方案。本文将指导您如何通过 Nest.js 实现 OSS 签名直传上传回调,从而在文件上传成功或失败时及时获取通知。

准备工作

开始之前,您需要:

  • 阿里云 OSS 账户: 如果您还没有,请先注册一个。
  • Nest.js 项目: 创建或使用现有的 Nest.js 项目。
  • OSS SDK for Node.js: 在项目中安装 ali-oss npm 包。

配置 OSS

  1. 登录阿里云 OSS 控制台,创建一个新存储空间 (Bucket)。
  2. 在存储空间设置页面,点击 回调规则 选项卡。
  3. 点击 添加回调规则 按钮。
  4. 填写以下信息:
    • 回调 URL:填写 Nest.js 服务端的回调 URL。
    • 事件类型:选择 文件上传成功文件上传失败
    • 回调参数:填写需要传递给 Nest.js 服务端的参数。

实现 Nest.js 回调控制器

在 Nest.js 项目中,创建一个新的控制器来处理 OSS 的回调请求。

import { Controller, Post, Body } from '@nestjs/common';

@Controller('oss-callback')
export class OssCallbackController {
  @Post()
  async callback(@Body() body: any) {
    console.log(body);
  }
}

启动 Nest.js 服务端

使用以下命令启动 Nest.js 服务端:

npm run start

测试 OSS 回调

使用 OSS SDK for Node.js 上传一个文件到 OSS:

const OSS = require('ali-oss');

const client = new OSS({
  region: 'oss-cn-hangzhou',
  accessKeyId: 'your-access-key-id',
  accessKeySecret: 'your-access-key-secret',
  bucket: 'your-bucket-name',
});

const result = await client.put('test.txt', 'Hello World');

console.log(result);

上传成功后,OSS 将向 Nest.js 服务端发送回调请求。服务端将打印回调请求的内容。

{
  "bucket": "your-bucket-name",
  "name": "test.txt",
  "size": 11,
  "mimeType": "text/plain",
  "md5": "1234567890abcdef",
  "crc64": "1234567890abcdef",
  "eventTime": "2023-03-08T12:00:00Z"
}

使用回调信息

通过回调请求,您可以实时获取文件上传信息,例如:

  • 文件名
  • 文件大小
  • 文件类型
  • 上传时间

您可以利用这些信息执行各种操作,例如:

  • 实时监控文件上传状态: 了解文件上传是否成功或失败。
  • 处理上传后的文件: 将文件保存到数据库、发送电子邮件通知等。
  • 与其他系统集成: 将 OSS 与其他系统(如 CRM、ERP)集成,实现数据同步和处理。

常见问题解答

  1. 如何自定义回调 URL?

    在 OSS 控制台的 回调规则 设置中,您可以填写您自己的回调 URL。

  2. 如何处理上传失败的回调?

    您可以在 oss-callback 控制器中编写自定义逻辑来处理上传失败的回调。

  3. OSS 支持哪些事件类型?

    OSS 支持的文件事件类型包括:

    • 文件上传成功
    • 文件上传失败
    • 文件复制成功
    • 文件复制失败
    • 文件删除成功
    • 文件删除失败
  4. 如何更改回调参数?

    您可以通过修改 OSS 控制台中的 回调规则 设置来更改回调参数。

  5. 为什么我没有收到回调请求?

    • 检查您的 OSS 回调规则是否正确配置。
    • 检查您的 Nest.js 服务端是否正在运行并监听回调 URL。
    • 确保您使用正确的 OSS 凭证。