Node.js删除文件

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

您可以根据需要删除单个文件(Object)、删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。

警告

请您谨慎使用删除操作,文件删除后将无法恢复。

删除单个文件

以下代码用于删除examplebucket中的exampleobject.txt文件。

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

const client = new OSS({
  // oss-cn-hangzhou填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'oss-cn-hangzhou',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填写Bucket名称。
  bucket: 'examplebucket',
});

async function deleteObject() {
  try {
    // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
    const result = await client.delete('exampleobject.txt');
    console.log(result);
  } catch (error) {
    console.log(error);
  }
}

deleteObject();

批量删除文件

手动删除文件时,每次最多删除1000个文件。您可以删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。

手动删除多个文件时,返回结果包括如下两种模式:

  • 详细模式(verbose):OSS返回的消息体中会包含所有删除Object的结果。默认采用详细模式。

  • 简单模式(quiet):OSS不返回消息体。

OSS还支持通过设置生命周期规则来自动删除文件。更多信息,请参见基于最后一次修改时间的生命周期规则

删除指定名称的多个文件

以下代码用于删除指定名称的多个文件。

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

const client = new OSS({
  // oss-cn-hangzhou填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'oss-cn-hangzhou',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填写Bucket名称。
  bucket: 'examplebucket',
});

async function deleteMulti() {
  try {
    // 填写需要删除的多个Object完整路径并设置返回模式为详细模式。Object完整路径中不能包含Bucket名称。
    // let result = await client.deleteMulti(['exampleobject-1', 'exampleobject-2', 'testfolder/sampleobject.txt']);
    // console.log(result);
    // 填写需要删除的多个Object完整路径并设置返回模式为简单模式。Object完整路径中不能包含Bucket名称。
    const result = await client.deleteMulti(['exampleobject-1', 'exampleobject-2', 'testfolder/sampleobject.txt'], {quiet: true});
    console.log(result);
  } catch (error) {
    console.log(error);
  }
}

deleteMulti();

删除指定前缀或目录下的多个文件

以下代码用于删除指定前缀的多个文件或者指定目录(文件夹)及目录下的所有文件。

警告

如果以下示例代码中前缀prefix的值为空字符串或者NULL,将会删除整个Bucket内的所有文件,请谨慎使用。

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

const client = new OSS({
  // oss-cn-hangzhou填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'oss-cn-hangzhou',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // 填写Bucket名称。
  bucket: 'examplebucket',
});

// 处理请求失败的情况,防止promise.all中断,并返回失败原因和失败文件名。
async function handleDel(name) {
  try {
    await client.delete(name);
  } catch (error) {
    error.failObjectName = name;
    return error;
  }
}

// 删除多个文件。
async function deletePrefix(prefix) {
  const list = await client.list({
    prefix: prefix,
  });

  list.objects = list.objects || [];
  const result = await Promise.all(list.objects.map((v) => handleDel(v.name)));
  console.log(result);
}
// 如果您需要删除所有前缀为src的文件,则prefix设置为src。设置为src后,所有前缀为src的非目录文件、src目录以及目录下的所有文件均会被删除。
deletePrefix('src');
// 如果您仅需要删除src目录及目录下的所有文件,则prefix设置为src/。
// deletePrefix('src/');

相关文档

  • 关于删除单个或多个文件的完整示例代码,请参见GitHub示例

  • 关于删除单个文件的API接口说明,请参见DeleteObject

  • 关于删除多个文件的API接口说明,请参见DeleteMultipleObjects