You need to enable JavaScript to run this app.
导航

普通预签名(Node.js SDK)

最近更新时间2024.02.04 18:30:56

首次发布时间2022.05.13 18:28:15

TosClient 在向服务端发起请求时,默认会在请求 header 里包含签名。SDK 也支持构造带签名的 URL,您可以直接用该 URL 发起 HTTP 请求,也可以将该 URL 共享给第三方实现访问授权。

示例代码

使用预签名的 URL 上传对象

以下代码用于预签名的 URL 向指定桶中上传对象。

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';
import axios from 'axios';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'], 
  accessKeySecret: process.env['TOS_SECRET_KEY'], 
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  try {
    const bucketName = 'node-sdk-test-bucket';
    const objectName = 'putObject-from-PreSignedUrl-test';
    // 预签名对象下载地址,当 method 为 'GET' 时将 URL 复制到浏览器地址栏中即可访问该对象
    const url = client.getPreSignedUrl({
      // method 支持 'GET'/'PUT'/'HEAD'/'DELETE'
      method: 'PUT',
      bucket: bucketName,
      key: objectName,
    });
    // 预签名地址
    console.log('PreSignedUrl:', url);

    // 使用axios发送请求
    const uploadResult = await axios.put(url, 'hello world from PreSignedUrl');

    // 查询刚刚上传对象的大小
    const { data } = await client.headObject({
      bucket: bucketName,
      key: objectName,
    });
    // object size: 29
    console.log('object size:', data['content-length']);
  } catch (error) {
    handleError(error);
  }
}

main();

使用预签名的 URL 下载对象

以下代码用于预签名的 URL 向指定桶中下载对象。

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

import axios from 'axios';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'], 
  accessKeySecret: process.env['TOS_SECRET_KEY'], 
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  try {
    const bucketName = 'node-sdk-test-bucket';
    const objectName = 'putObject-from-PreSignedUrl-test';
    // 预签名对象下载地址,当 method 为 'GET' 时将 URL 复制到浏览器地址栏中即可访问该对象
    const url = client.getPreSignedUrl({
      // method 支持 'GET'/'PUT'/'HEAD'/'DELETE'
      method: 'GET',
      bucket: bucketName,
      key: objectName,
    });
    // 预签名地址
    console.log('PreSignedUrl:', url);

    // 使用 axios 发送请求
    const result = await axios.get(url);
    console.log('get result:', result.data);
  } catch (error) {
    handleError(error);
  }
}

main();

使用预签名的 URL 删除对象

以下代码用于预签名的 URL 在指定桶中删除对象。

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

import axios from 'axios';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'], 
  accessKeySecret: process.env['TOS_SECRET_KEY'], 
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,"Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

async function main() {
  try {
    const bucketName = 'node-sdk-test-bucket';
    const objectName = 'putObject-from-PreSignedUrl-test';
    // 预签名对象删除地址,当 method 为 'GET' 时将 URL 复制到浏览器地址栏中即可访问该对象
    const url = client.getPreSignedUrl({
      // method 支持 'GET'/'PUT'/'HEAD'/'DELETE'
      method: 'DELETE',
      bucket: bucketName,
      key: objectName,
    });
    // 预签名地址
    console.log('PreSignedUrl:', url);

    // 使用 axios 发送请求
    const result = await axios.delete(url);
    console.log('delete result:', result);
  } catch (error) {
    handleError(error);
  }
}

main();