You need to enable JavaScript to run this app.
对象存储

对象存储

复制全文
预签名机制
普通预签名(Node.js SDK)
复制全文
普通预签名(Node.js SDK)

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();
最近更新时间:2024.02.04 18:30:56
这个页面对您有帮助吗?
有用
有用
无用
无用